Что является стандартным исключением для Java в случае не поддерживаемых / реализованных операций?

308

В частности, есть ли стандартный Exceptionподкласс, используемый в этих обстоятельствах?

Кришна Кумар
источник
Целесообразно ли использовать, когда класс не реализует метод, но дочерние классы могут это делать? Другими словами, иметь абстрактный метод в неабстрактном классе.
OSA
@SergeyOrshanskiy Это полезно, когда, в зависимости от того, как вы создаете объект, вам нужно создать анонимный класс, который реализует интерфейс для создания экземпляра переменной-члена, но вы не хотите, чтобы она использовалась. Если вы установите его, nullи вы случайно использовали его (или кто-то другой), вы получите, NullPointerExceptionsчто менее очевидно, чем UnsupportedOperationExceptionsв этом случае. Просто пример.
2rs2ts

Ответы:

438

java.lang.UnsupportedOperationException

Брошенный, чтобы указать, что запрошенная операция не поддерживается.

DFA
источник
4
@JarrodRoberson Хорошо, это утверждение действительно должно быть удалено из документации класса в этом случае. Кажется, исключение используется другими пакетами. Я предполагаю, что если Oracle это сделает, то мы тоже должны. Я отправлю отчет об ошибке.
Мартен Бодьюз
1
Имейте в виду, что это не проверено RuntimeException . Вы не получите никакой обратной связи или помощи в обработке этих исключений во время компиляции. Если это используется для метода-заглушки или незавершенного процесса, вы должны использовать какое-то проверенное исключение.
TastyWheat
221

Различайте два случая, которые вы назвали:

  • Чтобы указать, что запрошенная операция не поддерживается и, скорее всего, никогда не будет, бросьте UnsupportedOperationException.

  • Чтобы указать, что запрошенная операция еще не реализована, выберите один из следующих вариантов:

    1. Пьют NotImplementedExceptionиз apache commons-lang который был доступен в commons-lang2 и был повторно добавлен в commons-lang3 в версии 3.2.

    2. Реализуйте свой собственный NotImplementedException .

    3. Бросьте UnsupportedOperationExceptionс сообщением, как "Не реализовано, пока".

Штеффен
источник
1
Я иду с этим, потому что это кажется мне разумным. «Еще» или «никогда», указанные в Исключении, дают представление о том, как на это реагировать.
sschrass
3
# 1 или 2 очень предпочтительны на практике. # 3 действительно фиксирует семантическое различие между «не поддерживается» и «не реализован», но наличие отдельного класса облегчает быстрый поиск, чтобы убедиться, что вы не забыли реализовать что-либо, что вам нужно, перед фиксацией.
Шон У
4
# 3 лучше всего подходит для не реализованных методов, так как не требует сторонней библиотеки или дополнительной работы, даже если это commons-lang.
JoshDM
28

Если вы создаете новую (еще не реализованную) функцию в NetBeans , то она генерирует тело метода со следующим оператором:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

Поэтому я рекомендую использовать исключение UnsupportedOperationException .

Бенни Нойгебауэр
источник
14

Если вы хотите больше детализации и лучшего расшифровки, вы можете использовать NotImplementedException от commons-lang

Предупреждение. Доступно только до версии 2.6 и после версии 3.2.

Гийом
источник