Який стандартний виняток для викидання в Java для не підтримуваних / реалізованих операцій?


308

Зокрема, чи існує стандартний Exceptionпідклас, який використовується в цих умовах?


Чи доцільно використовувати, коли клас не реалізує метод, але дочірні класи можуть це робити? Іншими словами, мати абстрактний метод у неабстракційному класі.
osa

@SergeyOrshanskiy Це корисно, коли, залежно від того, як ви створюєте об'єкт, вам потрібно створити анонімний клас, який реалізує інтерфейс, щоб інстанціювати змінну члена, але ви не хочете, щоб вона використовувалася. Якби ви встановили його nullі випадково використовували його (або хтось інший), ви отримаєте NullPointerExceptionsменш очевидні, ніж UnsupportedOperationExceptionsу цьому випадку. Просто приклад.
2rs2ts

Відповіді:


438

java.lang.UnsupportedOperationException

Викинуто, щоб вказати, що запитувана операція не підтримується.


4
@JarrodRoberson Гаразд, цей вислів дійсно слід видалити з документації класу в цьому випадку. Виняток, схоже, використовують інші пакети. Я думаю, якщо Oracle робить це, то ми повинні робити це. Я подам звіт про помилку.
Maarten Bodewes

1
Будьте в курсі, це неперевірено RuntimeException . Під час компіляції ви не отримаєте жодного відгуку чи допомоги щодо обробки цих винятків. Якщо це використовується для заглушеного методу або незавершеного виробництва, ви повинні використовувати якийсь перевірений виняток.
TastyWheat

221

Розмежуйте два названі вами випадки:

  • Щоб вказати, що запитувана операція не підтримується і, швидше за все, ніколи не буде, киньте an UnsupportedOperationException.

  • Щоб вказати, що запитувана операція ще не здійснена, виберіть між цим:

    1. Використовуйте NotImplementedExceptionз apache commons-lang, який був доступний у commons-lang2 та був повторно доданий до commons-lang3 у версії 3.2.

    2. Реалізуйте своє NotImplementedException.

    3. Накиньте UnsupportedOperationExceptionповідомлення на зразок "Ще не реалізовано".


1
Я йду з цим, бо мені це здається розумним. "Все ж" або "ніколи", зазначений у Винятку, дає уявлення про те, як реагувати на це.
sschrass

3
№s 1 або 2 є набагато кращими на практиці. №3 фіксує смислове розмежування між "не підтримується" і "не реалізовано", але наявність окремого класу полегшує швидкий пошук, щоб переконатися, що ви не забули реалізувати все, що вам слід, перш ніж здійснити.
Шон U

4
№3 найкраще використовувати не реалізовані методи, оскільки для цього не потрібна стороння бібліотека або додаткова робота, навіть якщо це commons-lang.
JoshDM


14

Якщо ви хочете більше деталізації та кращого дешифрування, ви можете використовувати NotImplementedException від commons-lang

Попередження: Доступно лише до версій 2.6 та після версій 3.2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.