1

次のコード:

try {
    value = parse(myData);
} catch (Exception e) {
    if ( e instanceof IOException|| e instanceof IllegalArgumentException) {
       logger.debug("illegal argument");
    } else {
       logger.debug("this is printing");
    }
}

解析方法:

parse(String data) throws IOException, IllegalArgumentException {
   // do validation
    throw new IllegalArgumentException("illegal");
}

「違法な議論」を期待していました。しかし、代わりに「これは印刷中です」と表示されます。

ここで何か見逃しましたか?

4

2 に答える 2

1

たどった。この IllegalArgumentException がスローされると、EJBTransactionRollbackException によってラップされます。

以下がスローされます。

The transaction has been marked rollback only because the bean encountered a non-application 
exception :java.lang.IllegalArgumentException: 
Actual Exception class: class javax.ejb.EJBTransactionRolledbackException

ここで問題は異なります。EJBTransactionException が実際の例外をオーバーライドしないようにする方法です。

于 2013-07-09T20:40:57.717 に答える
0

ただのアイデア。throwセクションとcatchセクションで同じパッケージのクラスを使用してもよろしいですか。たとえばcom.foo.bar.IllegalArgumentException、 parse メソッドをスローjava.lang.IllegalArgumentException できますが、キャッチしようとしています。異なるクラスにある場合は、インポートセクションを確認してください。

于 2013-07-09T20:27:45.907 に答える