2016-11-18 1 views
0

このコードでは、例外を伝播するためにthrowキーワードが必要ですか?余分throwを追加している -Throwables.propagate(e)でthrowキーワードを使用する必要がありますか?

try { 
    //try something 
} catch (Exception e) { 
    throw Throwables.propagate(e); 
} 

Throwablesドキュメントには、このメソッドは常に例外をスローすると言っていますか?代わりに以下を書いてもいいですか?

try { 
    //try something 
} catch (Exception e) { 
    Throwables.propagate(e); 
} 

答えて

4

javadoc

を述べRuntimeException戻り値の型は戻り値が囲む 法によって要求された場合には幸せのJava 型システムを作るためにクライアントコードのみのためです。

、次にあなたがreturn又はthrows文方法を使用できるように戻り型(RuntimeException)が必要であり、換言すれば、この例を

T doSomething() { 
    try { 
    return someMethodThatCouldThrowAnything(); 
    } catch (IKnowWhatToDoWithThisException e) { 
    return handle(e); 
    } catch (Throwable t) { 
    throw Throwables.propagate(t); 
    } 
} 

を提供します。あなたが最後catchブロックにthrowを省略した場合、それは価値がそのcatchブロックから返されることを保証することはできませんので

上記の例では、その後、Javaコンパイラはエラーを報告します。 A return or throws instead indicate that the method completes at that point, abruptly.

+0

何が間違っていましたか?なぜdownvote? –

関連する問題