Должен ли я поставить броски allectalargumentException на функцию?

StackOverflow https://stackoverflow.com/questions/5304098

  •  24-10-2019
  •  | 
  •  

Вопрос

Я строю научное программное обеспечение с большим количеством расчетов и, конечно, аргументы могут иметь неправильную длину и т. Д. Поэтому я использовал IllegalArgumentException класс, как это казалось правильным названием для этой проблемы, но если я положил throws IllegalArgumentException При определении функции?

Я спрашиваю об этом, потому что после того, как я написал это, редактор Eclipse не попросил меня окружить функцию Try and Catch. Я думал, что так применялись попытки. Я прочитал учебник по обработке исключений на java.com, но я не уверен, что понял роль в отношении моего вопроса правильно.

Это было полезно?

Решение

RuntimeExceptions Like IllegalArgumentException используются для указания ошибки программирования. Анкет Сама программа редко должна быть в состоянии справиться с ней. Кто -то должен вручную исправить код.

Потенциал RuntimeExceptionS должен быть задокументирован как -то в функциональном контракте (т.е. Javadoc), либо с явным @throws, или при описании входов. Если у вас нет Javadoc для этой функции, вы можете добавить пункт о бросках, чтобы только документировать потенциальные ловушки использования функции, но в целом добавляя замены, чтобы исключить выполнение исключений.

Если предоставление неправильной длины на самом деле не является ошибкой программирования, но является ситуацией исключения, я бы создал новое проверенное исключение (например, BadlengthEerror). Если это не исключительная ситуация, не используйте исключения для управления потоком.

Другие советы

Есть два типа исключений:

Исключения времени выполнения (например, например, нелегаларгументирование и NullpointerException) не нужно явно пойманно, потому что они «не должны происходить». Когда они это делают, конечно, вам нужно где -то справиться с ними.

Регулярные исключения должны быть пойманы или объявлены брошенными, потому что они представляют собой более сложный вид ошибки.

Вам нужно прочитать неконтролируемые исключения - исключения, которые наследуют от Runtimeexception. Их не нужно объявлять в заголовке метода.

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

Последний абзац подводит итог:

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

IllegalArgumentException (вместе с некоторыми другими, например NullPointerException) примеры RuntimeException. Анкет Этот тип исключения не то, что известно как проверено исключение. Анкет Java требует, чтобы методы заявляли о том, какие проверенные исключения они бросают и что если называемый метод может выбросить проверенное исключение, вызовный метод должен либо заявить, что он бросает само исключение, либо подхватить и обрабатывать его.

Таким образом, моя конкретная рекомендация была бы «нет», не заявляйте об этом. Конечно, вы не хотите его ловить. В большинстве случаев вы также не хотите его бросать пока не Это непредвиденный поведение. Если это нормально и разумно, чтобы метод получил значение, которое ему не нравится, исключение - это неправильный способ справиться с этим.

Вы также можете рассмотреть возможность использования утверждений.

Первый момент при понимании исключений заключается в том, что они предназначены для исключительных ситуаций. Размышляя о вашем методе, вы должны спросить: «Должен ли этот метод бросает исключение, если проходит исключительное значение?» Если ответ «да», поместите его в объявление метода. Я не знаю, поймете ли вы идею, но это довольно просто. Это просто вопрос практики.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top