Когда использовать" throws RuntimeException " Java


Я делаю обзор кода, и я столкнулся с этим определением метода:

public void something() throws RuntimeException

Есть ли рациональная причина писать 'throws RuntimeException' в Java?

5 4

5 ответов:

RuntimeException является непроверенным исключением и поэтому может быть выброшен из любого места в коде. Говоря " Эй, этот метод может бросить RuntimeException" и зная, что любой кусок кода может сделать это, может быть избыточным. Единственная причина, по которой я могу думать, что вы хотели бы сделать его явным, - это для целей документации, например. "Бросает RuntimeException, когда происходит что-то конкретное", но тогда он, вероятно, принадлежит javadoc, а не сигнатуре метода.

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

Исключения среды выполнения представляют собой проблемы, которые являются результатом проблемы программирования, и поэтому нельзя разумно ожидать, что клиентский код API восстановится от них или обработает их каким-либо образом. Такие проблемы включают арифметические исключения, такие как деление на ноль; исключения указателя, такие как попытка доступа к объекту через нулевую ссылку; и исключения индексирования, такие как попытка доступа к элементу массива через индекс, который слишком велик или слишком мал.

Эти типы исключений напрямую зависят от кода, например, "ArrayIndexOutOfBoundsException". так что, если вы не используете массивы, arraylists, casting или что-то, что могло бы вызвать RuntimeException, не было бы необходимости писать это.

Любой метод может вызвать RuntimeException, как NullPointerException является наиболее распространенным. Поэтому, если метод вызывает исключение RuntimeException (или это подкласс), обычно это не помещается в сигнатуру метода.

Так что, по-моему, это просто показывает неумелость программиста, так как это не добавляет никакого значения. хотя, это не спрашивается, но даже имя метода, то есть что-то() является подозрительным. Она не передает читателю никакого смысла.