3

次のコードがあります

 try{//do something
     }
  catch (Exception e) {
        log.error(e, e);
        if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            throw new RuntimeException(e);
        }
    }

findbugs 静的分析ツールは、この警告をスローします

すべての RuntimeException は RuntimeException のインスタンスであるため、instanceof は methodX のすべての非 null 値に対して常に true を返します。

私が理解していないのは、RuntimeExceptionではなくキャッチされているその例外であるため、なぜこの警告ですか?

4

4 に答える 4

6

おそらく、// do somethingコードはチェックされた例外をスローしないため、try ブロックで取得できる例外はチェックされていない例外 (サブクラス化RuntimeException) のみです。

于 2012-05-23T10:00:39.783 に答える
4

次のコードを試すこともできます。これは、読んで維持する方が良いでしょう。

try{//do something
}
catch (RuntimeException e) {
    throw e;
} 
catch (Exception e) {
    throw new RuntimeException(e);
}
于 2012-05-23T10:08:03.660 に答える
0

Try http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Throwables.html#propagate%28java.lang.Throwable%29. It does exactly what you want. Today I did the replacement for the same reason (findbugs warning), also looked the source of this method.

于 2012-10-03T15:18:52.717 に答える