2017-10-11 119 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

相关问题