2011-01-11 2 views
14

В Java, когда вы должны бросать IllegalArgumentException и когда InvalidParameterException? Исходя из фона C#, у нас будет ArgumentNullException, который получен из ArgumentException. Если бы я хотел бы реализовать эквивалент ArgumentNullException/ParameterNullException в Java, я должен продлить IllegalArgumentException или InvalidParameterException?InvalidParameterException или IllegalArgumentException

Примечание: Я не пытаюсь реализовать ArgumentNullException/ParameterNullException, это просто обеспечит мне лучшее понимание, если я смогу сопоставить их с каркасом C#.

ответ

13

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

java.security.InvalidParameterException уже подкласс IllegalArgumentExceptionпредназначен для использования классов двигателя JCA/JCE (JavaDoc), и я бы не использовать или подкласс в другом контексте.

+3

Но когда вы будете бросать 'InvalidParameterException', а не' IllegalArgumentException'? – Cornelius

+0

@Cornelius, возможно, никогда :-) –

+8

@Cornelius - я использовал бы это специальное 'InvalidParameterException' ** только **, если бы мне пришлось реализовать интерфейсы или типы подклассов из * инфраструктуры Java Crypto Architecture *, и выброс этого исключения обязательный (что я обычно оставляю экспертам ;-)) –

11

Первое спасибо за ваш вопрос. Теперь я знаю о существовании 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 только в контексте безопасности.

4

Существует уже исключение, когда вы ожидаете, что параметры не будут пустыми: NullPointerException. Некоторые программисты думают, что только ошибочный код бросает NullPointerException, но если вы действительно ожидаете, что параметры не будут равны нулю, и вы не сможете оправиться от этой ситуации, это правильное исключение для броска. Из JavaDoc:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект.

Но если мы говорим не о нулевых значениях, а просто недопустимом значении, тогда вы должны выбросить IllegalArgumentException. Из JavaDoc:

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

Как правило, я бы сказал, что вы должны ознакомиться с исключениями Java (из пакета java.lang) и использовать их соответствующим образом. Если вы не найдете подходящее исключение, добавьте его.

Также обратите внимание, что исключение «InvalidParameterException» находится в пакете «java.security», который, вероятно, не, что вы хотите.

Смежные вопросы