Целесообразно ли использовать, когда класс не реализует метод, но дочерние классы могут это делать? Другими словами, иметь абстрактный метод в неабстрактном классе.
OSA
@SergeyOrshanskiy Это полезно, когда, в зависимости от того, как вы создаете объект, вам нужно создать анонимный класс, который реализует интерфейс для создания экземпляра переменной-члена, но вы не хотите, чтобы она использовалась. Если вы установите его, nullи вы случайно использовали его (или кто-то другой), вы получите, NullPointerExceptionsчто менее очевидно, чем UnsupportedOperationExceptionsв этом случае. Просто пример.
@JarrodRoberson Хорошо, это утверждение действительно должно быть удалено из документации класса в этом случае. Кажется, исключение используется другими пакетами. Я предполагаю, что если Oracle это сделает, то мы тоже должны. Я отправлю отчет об ошибке.
Мартен Бодьюз
1
Имейте в виду, что это не провереноRuntimeException . Вы не получите никакой обратной связи или помощи в обработке этих исключений во время компиляции. Если это используется для метода-заглушки или незавершенного процесса, вы должны использовать какое-то проверенное исключение.
TastyWheat
221
Различайте два случая, которые вы назвали:
Чтобы указать, что запрошенная операция не поддерживается и, скорее всего, никогда не будет, бросьте UnsupportedOperationException.
Чтобы указать, что запрошенная операция еще не реализована, выберите один из следующих вариантов:
Я иду с этим, потому что это кажется мне разумным. «Еще» или «никогда», указанные в Исключении, дают представление о том, как на это реагировать.
sschrass
3
# 1 или 2 очень предпочтительны на практике. # 3 действительно фиксирует семантическое различие между «не поддерживается» и «не реализован», но наличие отдельного класса облегчает быстрый поиск, чтобы убедиться, что вы не забыли реализовать что-либо, что вам нужно, перед фиксацией.
Шон У
4
# 3 лучше всего подходит для не реализованных методов, так как не требует сторонней библиотеки или дополнительной работы, даже если это commons-lang.
JoshDM
28
Если вы создаете новую (еще не реализованную) функцию в NetBeans , то она генерирует тело метода со следующим оператором:
null
и вы случайно использовали его (или кто-то другой), вы получите,NullPointerExceptions
что менее очевидно, чемUnsupportedOperationExceptions
в этом случае. Просто пример.Ответы:
java.lang.UnsupportedOperationException
источник
RuntimeException
. Вы не получите никакой обратной связи или помощи в обработке этих исключений во время компиляции. Если это используется для метода-заглушки или незавершенного процесса, вы должны использовать какое-то проверенное исключение.Различайте два случая, которые вы назвали:
Чтобы указать, что запрошенная операция не поддерживается и, скорее всего, никогда не будет, бросьте
UnsupportedOperationException
.Чтобы указать, что запрошенная операция еще не реализована, выберите один из следующих вариантов:
Пьют
NotImplementedException
из apache commons-lang который был доступен в commons-lang2 и был повторно добавлен в commons-lang3 в версии 3.2.Реализуйте свой собственный
NotImplementedException
.Бросьте
UnsupportedOperationException
с сообщением, как "Не реализовано, пока".источник
Если вы создаете новую (еще не реализованную) функцию в NetBeans , то она генерирует тело метода со следующим оператором:
Поэтому я рекомендую использовать исключение UnsupportedOperationException .
источник
Если вы хотите больше детализации и лучшего расшифровки, вы можете использовать NotImplementedException от commons-lang
Предупреждение. Доступно только до версии 2.6 и после версии 3.2.
источник