技术解析

看完这块代码,我久久不能平静
0
2021-06-04 00:49:32
idczone

try { .... if(url == null) { throw new NullPointerException(); } .... } catch 国外服务器(IOException e) { e.fillInStackTrace(); }


为啥

url 为空的时候直接调用就会抛出 NullPointerException

真没想到能遇上这样的代码,以前看着别人的截图也就乐乐

这个 catch 是为可能是不合法的或者无法访问的 url 准备的

可能是为了方便在 catch 中处理空指针异常

遇到 NullPointerException,严禁使用 catch 来隐藏编码错误

/>catch 的是 IOException

这个 catch 应该是管网络 IO 不可用的异常

看完这个帖子,我久久不能平静

能把完整代码贴出来么?显式抛 NPE 很可能是为了快速失败( fail-fast )
https://stackoverflow.com/questions/45632920/why-should-one-use-objects-requirenonnull/45632988

可能完全是为了终止当前语句块,但是又不想终止方法,可以用下面的骚操作实现:
do {
if (url == null) {
break;
}
} while (false)

距离发帖过去 1 小时 20 分钟了,现在心情平静了吗?

现在平静了吗

现在平静了吗
楼主你这么容易激动,对不起你这个 ID 啊。:doge

背后的原因让人暖心

对的,url 不为空不代表 url 就正确返回结果,请求出现异常是最正常不过的事情。这时候抛出异常显然不合适,所以要用 try/catch 吃下来 IOException,并通过日志输出异常。

赞同这位老哥,这个他手动抛空指针了,后面代码不一定会抛... 所以看情况。这代码确实不太好。11 楼那个看起来更舒服点

我觉得这个代码很好啊(前提是出 null 真是异常而不是预期中的错误)。谁知道我一个 null 放后面的库都会干些啥,到时候真有 null 了都不知道怎么调试。

唯一槽点,扔到了 try 里面。没啥大问题。

感觉没啥毛病啊。。入參不合法还不让抛异常了吗

没毛病,很可能是等后面自动抛 npe 就晚了,抛异常前已经执行的语句又不能回滚的,

还不平静吗?



保护代码在正常条件下执行而已,难道你从来不检查参数的吗

我觉得很多时候这是正确的编码方式,Java 里毕竟没有 checkNotNull

这个就是 guava 的 precondition.checknotnull 吧

不是十分的优雅,不过没觉得有太大的问题。

不晓得
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服