668
правок
Изменения
Нет описания правки
Нарушение контракта со стороны создателя метода - это, например, что-нибудь на подобии <tex>MethodNotImplementedYetException</tex>.
Пользователь метода может нарушить контракт, например, таким способом: на вход <tex>Integer.parseInt(String)</tex> подать строку с буквами и по заслугам получить <tex>NumberFormatException</tex>
== А что собственно бросать? ==
Выбор не то чтобы сильно велик, но и не однозначен: <tex>checked,</tex> <tex>unchecked</tex> <tex>(runtime)</tex>, <tex>unchecked</tex> <tex>(error).</tex>
В подавляющем большинстве случаев <tex>Error</tex> вам не понадобится. Это в основном критические ошибки (например, <tex>StackOverflowError</tex>), с которыми пусть работает JVM.
<tex>Checked</tex> <tex>Exceptions</tex>, как было написано выше, заставляет программиста-пользователя написать код для ее обработки или же описать метод как “вызывающий исключительную ситуацию”.
С <tex>unchecked</tex> <tex> exception</tex> можно поступить по-разному. В случае с такими ошибками, пользователь сам решает, будет он обрабатывать эту ошибку, или же нет (компилятор не заставляет это делать).
Можно написать следующее простое правило: если некоторый набор входящих в метод данных может привести к нарушению контракта, и вы считаете, что программисту-пользователю важно разобраться с этим (и что он сможет это сделать), описывайте метод с конструкцией <tex>throws</tex>, иначе бросайте <tex>unchecked</tex> <tex>exception.</tex>