InvalidParameterException или IllegalArgumentException
В Java, когда вы должны бросать IllegalArgumentException
и когда InvalidParameterException
?
Исходя из фона С#, мы бы получили ArgumentNullException
, полученный из ArgumentException
. Если бы я хотел бы реализовать эквивалент ArgumentNullException
/ParameterNullException
в Java, я должен расширить IllegalArgumentException
или InvalidParameterException
?
Примечание. Я не пытаюсь реализовать ArgumentNullException
/ParameterNullException
, это просто обеспечит мне лучшее понимание, если я смогу сопоставить их с каркасом С#.
Ответы
Ответ 1
Нет очевидной необходимости подклассифицировать эти исключения, я бы сразу их использовал, чтобы сигнализировать, что метод был вызван с незаконными аргументами. Я всегда описывал реальную причину в части сообщения об исключениях.
java.security.InvalidParameterException
уже является подклассом IllegalArgumentException
, предназначенным для использования ядрами JCA/JCE (JavaDoc), и я не буду использовать или подклассифицировать его в другом контексте.
Ответ 2
Первое спасибо за ваш вопрос. Теперь я знаю о существовании InvalidParameterException
. Это исключение относится к пакету java.security и в соответствии с его javadoc
* This exception, designed for use by the JCA/JCE engine classes,
* is thrown when an invalid parameter is passed
* to a method.
IllegalArgumentExcption принадлежит java.lang и поэтому может использоваться для любых целей.
Я считаю, что в 99,9% случаев вы должны использовать IllegalArgumentExcption и использовать InvalidParameterException только в контексте безопасности.
Ответ 3
Уже существует исключение, когда вы ожидаете, что параметры не будут равны null: NullPointerException. Некоторые программисты думают, что только ошибочный код бросает NullPointerException, но если вы действительно ожидаете, что параметры не будут равны нулю, и вы не сможете оправиться от этой ситуации, это правильное исключение для броска. Из JavaDoc:
Брошено, когда приложение пытается использовать null в случае, когда требуется объект.
Но если мы говорим не о нулевых значениях, а просто о недопустимом значении, вы должны выбросить IllegalArgumentException. Из JavaDoc:
Брошенный, чтобы указать, что метод был передан незаконным или несоответствующим аргументом.
В качестве общего предложения я бы сказал, что вам следует ознакомиться с исключениями Java (из пакета java.lang) и использовать их соответствующим образом. Если вы не найдете подходящее исключение, добавьте его.
Также обратите внимание, что исключение "InvalidParameterException" находится в пакете "java.security", что, вероятно, не является тем, что вы хотите.