2011-01-11 5 views
14

Javaの場合IllegalArgumentExceptionを投げるべきときとInvalidParameterExceptionを投げるべきですか? C#バックグラウンドから来て、ArgumentExceptionから派生したArgumentNullExceptionがあります。 JavaでArgumentNullException/ParameterNullExceptionと同等の機能を実装したい場合は、IllegalArgumentExceptionまたはInvalidParameterExceptionを拡張する必要がありますか?InvalidParameterExceptionまたはIllegalArgumentException

注:私はArgumentNullException/ParameterNullExceptionを実装しようとしていません。これは、これらをC#フレームワークと一致させることができるかどうかをより良く理解するためのものです。

答えて

13

これらの例外をサブクラス化する必要はありません。不正な引数でメソッドが呼び出されたことを通知するためにすぐに使用したいと思います。私はいつも例外のメッセージ部分に本当の原因を記述します。

java.security.InvalidParameterException既にJCA/JCEエンジンクラス(JavaDocの)で使用するために設計されたIllegalArgumentExceptionのサブクラスであり、Iは、異なるコンテキストでそれを使用するか、またはサブクラスではないであろう。

+3

しかし、あなたは 'IllegalArgumentException'ではなく' InvalidParameterException'をいつ投げますか? – 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をスローすると考えていますが、実際にパラメータがnullでないことが予想され、この状況から回復できない場合は、スローするのが正しい例外です。 JavaDocから:

オブジェクトが必要な場合にアプリケーションがnullを使用しようとするとスローされます。

しかし、null値については言及していませんが、無効な値である場合は、IllegalArgumentExceptionをスローする必要があります。 JavaDocから:

不正なまたは不適切な引数がメソッドに渡されたことを示すためにスローされます。

一般的な示唆として、(java.langパッケージの)Java例外に慣れて、適切に使用する必要があります。適切な例外が見つからない場合は、1つを拡張します。

例外 "InvalidParameterException"は、パッケージ "java.security"にあります。ではなく、が必要です。

関連する問題