我有一个方法可以处理不同的错误代码,并始终引发未经检查的异常。该方法在全班许多地方都使用过。当我尝试在另一个没有void返回类型的方法中调用它时,如下所示:
public Object someMethod() {
....
if(success){
return result;
} else {
callMethodThatAlwaysThrowsUncheckedExceptions();
}
}
Run Code Online (Sandbox Code Playgroud)
java编译器说该方法是missing return statement。
我想到只有两个选择来解决这个问题:
但是,我真的不喜欢这些选项中的任何一个:第一个选项是因为代码重复,第二个选项是因为需要编写永远不会执行的代码。
还有其他解决方法吗?
除了 Slawomir Chodnicki 已经提供的出色答案之外,还有另一个建议。
更改您的callMethodThatAlwaysThrowsUncheckedExceptions()某个地方将其放入Exception工厂方法中。例如:改变这个:
// somewhere in callMethodThatAlwaysThrowsUncheckedExceptions
throw new MyException();
Run Code Online (Sandbox Code Playgroud)
到:
return new MyException();
Run Code Online (Sandbox Code Playgroud)
这样你就可以像这样调用该方法:
throw callMethodThatAlwaysThrowsUncheckedExceptions();
Run Code Online (Sandbox Code Playgroud)
因此将帮助编译器看到这是该执行分支的最后一条语句。
这对于不同的异常也非常有效,只是return代替throw
只是交换条件,如果方法抛出,您将永远无法返回。
if(!success){
callMethodThatAlwaysThrowsUncheckedExceptions();
}
return result;
Run Code Online (Sandbox Code Playgroud)
甚至
callMethodThatAlwaysThrowsUncheckedExceptions(succes);
return result;
Run Code Online (Sandbox Code Playgroud)
只需检查您的投掷方法的成功条件即可。
为了表明您不希望线路可达(在调用抛出方法之后),您可以
throw new AssertionError("comment to your co-developers why this never gets reached")
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |