web-dev-qa-db-ja.com

IllegalStateExceptionとIllegalArgumentExceptionの比較

では、呼び出し元がXMLなどの構成ファイルを渡すことを期待する関数を記述しています。次に、この指定されたファイルを解析して何かを抽出し、それを返します。

この関数では、(少なくとも)2つの「悪い」ことが起こります。

  1. 指定されたファイルが存在しないか、アクセスできません
  2. ファイルの解析/検証中に、予期しないコンテンツが見つかりました

最初のものは明らかにIllegalArgumentExceptionです。しかし、2番目のケースがどのような例外になるかはわかりません。入力が有効な形式であることを(documentation-contractによって)期待しているので、これもIllegalArgumentExceptionですか?または、与えられたパラメータは形式的に正しいので、むしろIllegalStateExceptionですが、解析後にのみ、不要な動作が発生するため、これ以上の手順を実行できません。

それとも別のものですか?

4
valenterry

どちらでもない。他の人が指摘したように、それは明らかにIllegalStateExceptionではありません。

そして、IllegalArgumentよりも FileNotFoundException または ParseException (またはおそらくXMLParseException)は、「悪いこと」1および2の説明と完全に一致します。

3
user949300

IllegalStateException のJavadocは言う

不正または不適切なタイミングでメソッドが呼び出されたことを通知します

メソッドがいつ呼び出されるか、JVMまたはコンテキストがどのような状態であるかは関係ありません。ファイルが正しくない限り、解析エラーは残ります。したがって、IllegalArgumentExceptionの方が適切であるように思えます。

9
Benni