1

特定の形式の文字列のみを受け入れるメソッドがあります。フォーマットが不正な場合、例外をスローしたい。私はJavaを初めて使用するので、ここで使用する正しいタイプの例外が何であるかわかりません。IllegalFormatException があることがわかりました。これは名前に基づいて正しいように聞こえますが、ドキュメントではこれについてかなり確信が持てません。ここで使用する正しい例外クラスは何ですか?

問題のメソッドは、'/^p[1-9][0-9]*$/i' に一致する 1 つの文字列引数を取る PropertyId クラスのコンストラクターです。これは、Python でのこの同等のものと基本的に同じように動作するはずです。

適切なものが実際にない場合、または私の場合は新しい Exception 派生物を作成する必要があることが一般的に同意されている場合を除き、標準ライブラリによって提供される Exception を使用することをお勧めします。

4

4 に答える 4

3

IllegalFormatException の Javadoc から、これは私には合理的に見えます

フォーマット文字列に無効な構文または指定された引数と互換性のないフォーマット指定子が含まれている場合にスローされる未チェックの例外。特定のエラーに対応するこの例外の明示的なサブタイプのみをインスタンス化する必要があります。

@BasvandenBroek が指摘しているように、これは文字列の形式をチェックするのではなく、形式情報を含む文字列に適しています。

ただし、親の IllegalArgumentException が最適な場合もあります。NumberFormatException は近いですが、適切ではなく、その親も IAE です。

注: IllegalArgumentException の独自のサブクラスを作成できます。

public class StringValidationFailedException extends IllegalArgumentException {
     public StringValidationFailedException(String message) {
          super(message);
     }
}
于 2013-10-05T19:04:21.083 に答える
3

私は@TwoTheと一緒です。IllegalArgumentExceptionがその方法です。実際、私は実際には多くの議論があるべきではないと思います。この状況は、まさに IllegalArgumentException が作成されたものです。

IllegalFormatException は確かに誤解を招く可能性がありますが、それ (およびそのサブクラス) はまったく別のケース (出力に指定した書式文字列が無効な場合) を対象としています。

独自のカスタム例外の生成は、細心の注意を払って行う必要があります。標準例外が適用されない特別なケースがある場合のみ。ここではそうではありません。絶対に必要でない限り、クライアントが非標準的なものに対処する必要はありません。

大きな力には大きな責任が伴うことを忘れないでください。

于 2013-10-05T19:58:41.160 に答える
2

IllegalArgumentExceptionを試してください。

于 2013-10-05T19:09:38.303 に答える