[英]Unreachable return statement in Java
我最近在5分鍾前迅速得到了編譯器錯誤unreachable statement
很快就編寫了這個小函數
private static boolean isTransientField(String name, Class beanClass) {
try {
Field field = beanClass.getDeclaredField(name);
return (field.getModifiers() & Modifier.TRANSIENT) == Modifier.TRANSIENT;
} catch (Exception e) {return false;}
return false;//unreachable statement
}
顯然我的最后一個return false
是無法到達的,但是為什么我的catch
塊僅在特殊情況下運行?
因為您在嘗試中有一個return語句。
您的代碼中只有兩個可能的執行路徑。
1.線
Field field = beanClass.getDeclaredField(name);
...按預期工作,下一行返回:
return (field.getModifiers() & Modifier.TRANSIENT) == Modifier.TRANSIENT
2.發生異常,執行catch塊中的返回。
給定這兩個路徑,就永遠無法達到第三個return語句。
因為在try塊的末尾也有返回。
因為您的try塊中也有返回值,所以無論如何,在try catch構造中都會達到返回值。
您所擁有的基本上等同於以下內容:
if (something)
return true;
else
return false;
else
return false;
現在,為什么還要另外兩個語句? 沒錯,您不會。
盡管上述所有內容都是正確的,但原因是您的代碼將通過快樂路徑成功處理並返回,或者將引發異常並進行相應處理,因此,實質上,您提供了if / else執行路徑。 編譯器將永遠不會到達第三個return語句。 如果您刪除了return false; 從捕獲塊,警告將消失。 如果您將以某種方式處理您檢查的異常(重新拋出堆棧),則會收到相同的警告,因為代碼將按預期返回或拋出異常(另一個if / else執行路徑)。
只是重申一下,不要將try / catch塊用於邏輯流。 catch塊應用於優雅地處理異常/錯誤。 其次,任何未聲明為void的函數都必須返回某種形式的聲明類型,在您的情況下為布爾值。
可能的解決方案
private static boolean isTransientField(String name, Class beanClass)
{
try
{
Field field = beanClass.getDeclaredField(name);
if((field.getModifiers() & Modifier.TRANSIENT) == Modifier.TRANSIENT)
{
return true;
}
else
{
return false;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.