Перегрузка метода и обработка исключений

Скажем, у меня есть следующий код:

public void methodOne(String argumentOne) {
    methodOne(argumentOne, false);
}

public void methodOne(String argumentOne, boolean equality) {
    //App logic here
}

И если логика приложения генерирует исключение (скажем, IllegalArgumentException / Parse Exception), и я хотел бы уловить это в вызывающем методе, следует ли добавить «выдает исключение IllegalArgumentException» во все идентификаторы метода или только в базовый идентификатор метода? Есть ли преимущество перед этим?


person Mohan Krishnan    schedule 10.12.2018    source источник
comment
IllegalArgumentException - это RuntimeException, поэтому его не нужно объявлять как брошенное.   -  person Maurice Perry    schedule 10.12.2018
comment
Круто, как насчет непроверенных исключений, таких как ParseException или Evaluation Exception P.S: Позвольте мне также изменить описание в вопросе.   -  person Mohan Krishnan    schedule 10.12.2018
comment
ParseException - проверенное исключение. Вы можете либо объявить его брошенным, либо поймать его в блоке метода.   -  person Maurice Perry    schedule 10.12.2018
comment
Вы должны задокументировать поведение бросания в JavaDocs ваших методов общедоступного интерфейса. Поведение в исключительных обстоятельствах является частью контракта ваших методов, точно так же, как значения, действительные в качестве входных.   -  person Hulk    schedule 10.12.2018
comment
@MohanKrishnan RuntimeExceptions - это непроверенные исключения ....   -  person Antoniossss    schedule 10.12.2018


Ответы (1)


Выдача отмеченного исключения означает, что вы ожидаете, что вызывающий будет вынужден подумать о том, как обработать это исключение. Вы должны делать это только в следующих случаях:

  • В вашем уме это преднамеренное, желаемое действие.
  • Вы имеете некоторое представление о том, как вызывающий объект будет обрабатывать проверенное исключение. В идеале, вы задокументировали, что вы ожидаете от них, за исключением исключения.

Таким образом, это очень плохая идея

  • объявить "выбрасывает" исключение, которое на самом деле никогда не генерируется. Это просто вызывает путаницу и заставляет разработчика игнорировать ваши исключения, поскольку они не имеют значения.
  • генерировать проверенное исключение, когда вряд ли есть разумный способ восстановления после него. В этом случае лучше использовать непроверенное исключение.

Я предпочитаю добавлять предложения throws для непроверенных исключений в качестве формы документирования того, что может пойти не так и что это означает, без принуждения вызывающей стороны обрабатывать эти исключения.

Кроме того, вы должны попытаться добавить содержательные сообщения к каждому исключению / ошибке, чтобы разработчику было проще решить, как исправить код или конфигурацию.

Я хотел бы уловить это в вызывающем методе, следует ли добавить «throws IllegalArgumentException» во весь идентификатор метода или только в базовый идентификатор метода?

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

person Peter Lawrey    schedule 10.12.2018