日期:2014-05-17  浏览次数:20845 次

关于在有返回值的方法中抛出RuntimeException
如果我直接写throw new RuntimeException(""),那是正确的

但是如果把这句话封装到另外一个类中调用时,就会老提示我没有设置返回值,我都丢异常了还要我给返回值干嘛?最烦的就是JAVA还把它当一个编译错误,其他语言最多只当一个warning

我知道在后面再跟上一句return null就能去掉这个错误,但是我不想在每个抛异常的地方都加一句这样的东西,感觉很奇怪的样子。

有没有其他办法可以解决这个问题呢?

------解决方案--------------------
探讨
现在在异常抛出封装类中改成返回异常对象,而不是直接把异常抛出来了,就是这样

throw ErrorHelper.getError("msg");

这样就可以避免返回值的问题,本来异常抛出来后,后面的代码就是无效的,完全不想为了让java编译通过而画蛇添足

------解决方案--------------------
编译器不知道你的ErrorHandler.raise("null");就一定会抛出异常啊!

加入后来你改了raise方法,不抛出异常了,java字节码验证的时候不就挂了么

java编译器怎么可能允许这样的行为存在


探讨

楼上显然没明白我的意思

Java code

public Integer test(Integer v) {
if (v != null) {
return v + 1;
} else {
throw new RuntimeException("null"); // 直接这样写是没错的
……