Почему выбрасывается методом части его подписи. Кажется странным включать это. Вот пример, где он находится на пути.Почему выбрасывается часть метода подписи
@Overide
public void foo() {
throw new UnsupportedOperationException();
}
Если кто-нибудь видит этот метод снаружи, он может попытаться его использовать, не зная, что он не поддерживается. Они будут изучать его только при попытке запустить код.
Однако, если они могут сделать что-то подобное, они будут знать, глядя на метод, который не поддерживается, и если UnsupportedOperationException не расширяет RuntimeException, они получат ошибку компиляции. EDIT1: Но это невозможно, потому что броски являются частью сигнатуры, поэтому переопределение не будет работать.
@Overide
public void foo() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
Этот вопрос касается Javas дизайна, так что я знаю, что это может быть трудно ответить без одного из людей, которые работают на него падают и на него ответить, но я надеялся, что, возможно, этот вопрос был задан им до того, или что может быть очевидная причина, чтобы так объяснить это.
Вы, кажется, отвечаете на свой собственный вопрос здесь? Это на подпись, потому что теперь вы (и компилятор) знаете, что код будет генерировать исключение и что его нужно обрабатывать? – Erik
Непроверенные исключения и условия, когда они выбрасываются, должны быть задокументированы в javadoc. Эта парадигма используется во встроенных библиотеках Java и предлагается несколькими книгами, например. Эффективная Java, чтобы назвать ее. Объявление их в подписи, как вы правильно отметили, не требуется компилятором. – Danstahr
Что вы спрашиваете, нужно ли выкинуть исключенное исключение или нет. Для запуска вашего метода используется '@ Override', который указывает, что он должен следовать контракту (аннотация или интерфейс), но для исключенных исключений вы не обязаны это делать. Независимо от того, выбрали ли вы его бросить или не всегда придерживаетесь хорошей оценки, как упомянуто @danstahr, добавьте его на javadoc. –