2017-11-05 5 views
0

は、我々は別の機会にIllegalArgumentException秒をスローコンストラクタ/メソッドを持っているとしましょう:どのように同じタイプの例外がスローされたのかを知るには?

class MyClass { 

    MyClass(char char1, char char2) { 
     if(condition1 on char1 and char2) { 
      throw new IllegalArgumentException("condition1 failed"); 
     } 
     if(different condition2 on char1 and char2) { 
      throw new IllegalArgumentException("condition2 failed"); 
     } 
     ... 
    } 

} 

私は、無効な引数を持つMyClassのインスタンスを構築したい場合は、どのように私がスローされた例外言うのでしょうか?

try { 
    MyClass clazz = new MyClass('a', 'a'); 
} catch (IllegalArgumentException e) { 
    // which one? 
} 

醜い溶液は、詳細メッセージをチェックする、またはIllegalArgumentExceptionの場合には、提供される原因を確認する、または(例えば、解析方法に適切であると思わない)例外の種類を使用することになります。この問題の一般的な解決法はありますか?

+0

を述べたように? –

+2

基本的にオプションがリストされています。 'IllegalArgumentException'をサブクラス化することもできます。 –

+0

@JoeCいくつかのデータを解析したいのですが、私のメソッドはParseExceptionsをさまざまな理由でスローします。私は実際に何が起こったのか知りたいし、適切なメッセージをユーザに提示したいのですが、getMessage()はそうではありません。 – tatsletni

答えて

0

キャッチブロックでe.getMessage()を確認できます。

1

あなたは両方のケースのために特定の例外を所有し、それによってはIllegalArgumentException

編集を拡張書くことができます:アレックスShesterovはすでにあなたはこれをしたいと思いますなぜ

関連する問題