2017-10-11 11 views
-1

次のコードスニペットが表示されました。 1つのメソッドはreturn文を必要としますが、もう1つはreturn文を要求しませ私はケース2)が "return null"ステートメントを必要とすると信じていますが、コンパイラは文句を言います。なぜ私は分からない。try/catchブロックの後にメソッドがreturn return文を必要とするかどうかを返しますか?

ケース1) "return null"ステートメントを削除すると、コンパイラーはそれが必要であると不平を言います。

private Foo createFoo(Bar bar, Baz baz) throws SomeException { 
    try { 
     if (...) { 
      // perform computation to return foo object 
      ...... 
      return foo; 
     } 
     else if (...) { 
      // perform computation to return foo object 
      ...... 
      return foo; 
     } 
    } catch(SomeException se) { 
     se.printStackTrace(); 
     throw se; 
    } 
    return null; 
} 

ケース2) "return null"文を追加すると、コンパイラは到達不能なコードに不満を持ちます。あなたの最初の例で

private Foo createFoo2(Bar bar, Baz baz) throws SomeException { 
    try { 
     // perform computation to return foo object 
     ...... 
     return foo; 
    } catch (SomeException se) { 
     se.printStackTrace(); 
     throw se; 
    } 
}   
+4

最初の条件も2番目の条件も一致しない場合はどうなりますか?つまり、if(...)でもelse if(...)でもありませんか?あなたはその事件のために何かを返す必要があります。 –

+1

@AndyTurnerは言った。最初のケースでは、try文を終了できます。 2回目の試行ではリターンが避けられないので、キャッチ後のステートメントには到達できません。 – Tyler

+0

はい、私は理解していますし、ヌルステートメントを返す必要があります。 – DaeYoung

答えて

1

プログラムの流れは、メソッドの最終}に到達することが可能です。特に、文がtrueと評価されない場合は、ifの文が実行されません。だから、その場合に何を返すべきかをプログラムに伝える必要があります。

2番目の例では、プログラムフローがメソッドの最終}に到達できません。その場合、プログラムに何を返すべきかを伝えることは意味がありません。コンパイラはエラーとしてフラグを立てることで、意味をなさないものを書くのを防ぎます。

+0

ありがとう!他の人のスレッドを読んだら、あなたのことは明らかにわかりました。 – DaeYoung

関連する問題