Error
、RuntimeException
、Throwable
、Exception
等の一般的な例外を使用すると、
本当のシステムエラーと、アプリケーションエラーを区別してハンドリングすることを妨げてしまいます。
違反コード例
public void foo(String bar) throws Throwable { // Noncompliant throw new RuntimeException("My Message"); // Noncompliant }
準拠方法
public void foo(String bar) { throw new MyOwnRuntimeException("My Message"); }
例外
オーバーライドされたメソッド内の一般的な例外は無視されます。
@Override public void myMethod() throws Exception {...}
参考
- MITRE, CWE-397 - Declaration of Throws for Generic Exception
- JPCERT, ERR07-J. - RuntimeException, Exception, Throwable をスローしない
- CERT, ERR07-J. - Do not throw RuntimeException, Exception, or Throwable
補足事項
-
この内容は以下の、squid の説明文を日本語翻訳したものです。
sonar-java/S112_java.html at master · SonarSource/sonar-java
-
リンク化したら使いやすいかもしれないので、1ルールごとに1ページ化しています。
コメント