我有一个方法可以处理不同的错误代码并始终抛出未经检查的异常。这个方法在全班很多地方都用到了。当我尝试在另一个没有 void 返回类型的方法中调用它时,如下所示:public Object someMethod() { .... if(success){ return result; } else { callMethodThatAlwaysThrowsUncheckedExceptions(); }}java 编译器说该方法是missing return statement.如何解决这个问题,我想到了两个选择:用其内容替换方法调用在返回空对象的方法调用之后添加一个返回语句但是我真的不喜欢这些选项中的任何一个:第一个是因为代码重复,第二个是因为需要编写永远不会执行的代码。还有其他方法可以解决这个问题吗?
2 回答

慕田峪9158850
TA贡献1794条经验 获得超7个赞
只需交换条款,如果方法抛出,您将永远无法返回。
if(!success){
callMethodThatAlwaysThrowsUncheckedExceptions();
}
return result;
甚至
callMethodThatAlwaysThrowsUncheckedExceptions(succes);
return result;
只需检查您的投掷方法中的成功条件。

慕沐林林
TA贡献2016条经验 获得超9个赞
除了Slawomir Chodnicki 已经提供的出色答案之外,还有另一个建议。
callMethodThatAlwaysThrowsUncheckedExceptions()
将你的which somewhere throws an更改Exception
为工厂方法。例如:改变这个:
// somewhere in callMethodThatAlwaysThrowsUncheckedExceptions throw new MyException();
到:
return new MyException();
这样你就可以像这样调用那个方法:
throw callMethodThatAlwaysThrowsUncheckedExceptions();
因此将帮助编译器看到这是该执行分支的最后一条语句。
这也适用于不同的例外情况,return
而不是throw
添加回答
举报
0/150
提交
取消