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


308

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


Целесообразно ли использовать, когда класс не реализует метод, но дочерние классы могут это делать? Другими словами, иметь абстрактный метод в неабстрактном классе.
OSA

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

Ответы:


438

java.lang.UnsupportedOperationException

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


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


14

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.