2011-11-01 7 views
10

私は同僚のコードを見直していると私は、このようなコードの一部が発生します。「例外をスローする」というのは悪い習慣ですか?

public X Foo1(Y y) throws Exception { 
    X result = new X(y); 
    result.Foo2(); 
    return result; 
} 

私はそこthrows Exception一部の必要はありませんが、私はこれを正当化する難しさを抱えていると信じています。より具体的なものであればExceptionFileNotFound,NoMemoryなど)でも意味があるかもしれませんが、それは不要だと思います。誰かが私にいくつかの理由を与えることができますこれは何が原因で発生することができ、なぜそれは悪い練習ですか?あるいは、このコードは大丈夫ですか?

答えて

26

throwsの宣言は、メソッドコントラクトの一部です。契約を定義するときは、常にのように、正確にはとする必要があります。したがって、throws Exceptionと言うのは悪い考えです。

同じ理由で、Stringを返すことが保証されている場合、メソッドがObjectを返すと言うことは悪いことです。

さらに、メソッドの呼び出し側はExceptionを必ず捕まえなければなりません(彼がこの醜さを伝播しない限り)。Exceptionをキャッチすることも悪い考えです。この質問への回答を参照してください:Is it a bad practice to catch Throwable?

+3

+1私はいくつかの実用的な理由を考えることができますが、 – MByD

5

これは、スローされた例外を処理するために、このメソッドを使用するすべての人に強制します。

チェック例外(私はそうではありません)を使用しても、どんな種類のものが間違っているかもしれない情報がまったくなくなります。だからあなたは本当に意味のある方法でそれを処理することはできません。

1

は、宣言があることを意味例外: - あなたのメソッド内で何かが、このようなチェック例外 を生成すること - は、あなたの方法はそれに対処することができないか、不本意である

あなたが最も特定の例外を使用して、関係のないグループに誘惑に抵抗しなければなりませんthrows宣言の量を減らすための例外。あなたが感じている場合は、それらの数が多すぎる、あなたの方法は複雑すぎるし、より小さなよりmanageabnle方法に壊れてしまいます

関連する問題