关于在有返回值的方法中抛出RuntimeException

Harryfin 2011-11-04 08:59:22
如果我直接写throw new RuntimeException(""),那是正确的

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

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

有没有其他办法可以解决这个问题呢?
...全文
405 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙四 2011-11-04
  • 打赏
  • 举报
回复
编译器不知道你的ErrorHandler.raise("null");就一定会抛出异常啊!

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

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


[Quote=引用 2 楼 harryfin 的回复:]

楼上显然没明白我的意思

Java code

public Integer test(Integer v) {
if (v != null) {
return v + 1;
} else {
throw new RuntimeException("null"); // 直接这样写是没错的
……
[/Quote]
kouyiSC 2011-11-04
  • 打赏
  • 举报
回复
而且这句代码 没有语法错误。。。
kouyiSC 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 harryfin 的回复:]
现在在异常抛出封装类中改成返回异常对象,而不是直接把异常抛出来了,就是这样

throw ErrorHelper.getError("msg");

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

我不知道 你哪里为什么会异常。。。
public Integer test(Integer v) {
if(v == null)
throw new RuntimeException("null");
return v + 1;
}

这个在我的myeclipse中完全正确的。。。以前也没有遇到过你的这种情况。。不知道是不是你的编译器哪里有问题还是怎么回事。。。
Harryfin 2011-11-04
  • 打赏
  • 举报
回复
现在在异常抛出封装类中改成返回异常对象,而不是直接把异常抛出来了,就是这样

throw ErrorHelper.getError("msg");

这样就可以避免返回值的问题,本来异常抛出来后,后面的代码就是无效的,完全不想为了让java编译通过而画蛇添足
kouyiSC 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 harryfin 的回复:]
楼上显然没明白我的意思


Java code


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

首先说明一点。。上面异常捕获后面不加return返回不会报错,加了会报错。。

其次代码不规范。。。可读性不好。。

public Integer test(Integer v) {
if(v == null)
throw new RuntimeException("null");
return v + 1;
}


it-er 2011-11-04
  • 打赏
  • 举报
回复
没搞懂你问的是什么
Harryfin 2011-11-04
  • 打赏
  • 举报
回复
楼上显然没明白我的意思


public Integer test(Integer v) {
if (v != null) {
return v + 1;
} else {
throw new RuntimeException("null"); // 直接这样写是没错的
// 如果把这句话封装进其他类,就会碰到一楼说的问题
//
// 被迫写成
// ErrorHandler.raise("null");
// return null; <- 这句话看起来太别扭,明明上面实际已经抛出异常,之后的语句不会被执行。但是为了消除JAVA的编译错误,不得不加了这么一句话

}
}
nizhicheng 2011-11-04
  • 打赏
  • 举报
回复
返回值 跟异常完全是两码事 ·~如果程序正常就不会有异常~~那就需要走正常流程 ,如果不想放回请方法声明void
Harryfin 2011-11-04
  • 打赏
  • 举报
回复
楼上第一句话理解我的意思了,就是要解决这个问题。所以我后来改成了返回一个异常实例,再在外面throw,而不是在函数里面throw,就没问题了。

楼上楼上的写法也是对的,但是如果判断比较多的时候,代码有时比较难调整成return一定在最后

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧