2017-10-11 114 views
-1

我遇到以下代碼片段。一種方法需要返回語句,但另一種方法不需要。我相信情況2)需要「返回null」語句,但編譯器抱怨。我不知道爲什麼。情況1)如果我刪除「return null」語句,編譯器會抱怨它需要它。在try/catch塊之後,一個方法是否返回一個對象需要返回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

如果您的第一個或第二個條件都不匹配會怎樣?既不是「if(...)'也不是'else if(...)'?你需要爲這種情況返回一些東西。 –

+1

@AndyTurner說什麼。第一種情況,你可以退出try語句。第二個返回在try中是不可避免的,因此catch後面的語句無法訪問 – Tyler

+0

是的,我理解並且有意義,它需要返回null語句。 – DaeYoung

回答

1

在你的第一個例子,這是可能的程序流程,達到了該方法的最終}。特別是,如果if語句的計算結果都不是true,則會發生這種情況。所以你需要告訴程序在那種情況下返回什麼。

在第二個例子中,程序流程不可能達到該方法的最終}。因此,在這種情況下,告訴程序要返回什麼是沒有任何意義的;並且編譯器通過將其標記爲錯誤來保護您避免寫出無意義的內容。

+0

謝謝!在閱讀別人的話題之後,你明顯對我有意義。 – DaeYoung

相關問題