我遇到了以下代码段。一种方法需要return语句,但另一种方法不需要。我相信Case 2)需要“return null”语句,但编译器会抱怨。我不知道为什么。
案例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;
}
}
答案 0 :(得分:1)
在您的第一个示例中,程序流可能会到达方法的最终}
。特别是,如果if
语句都没有计算到true
,则会发生这种情况。所以你需要告诉程序在这种情况下返回什么。
在第二个示例中,程序流不可能到达方法的最终}
。因此,在这种情况下告诉程序要返回什么是没有任何意义的;并且编译器通过将其标记为错误来保护您免于编写无意义的内容。