看完这块代码,我久久不能平静

2021-04-08 16:26:31 +08:00
 ignore

try { .... if(url == null) { throw new NullPointerException(); } .... } catch (IOException e) { e.fillInStackTrace(); }

12017 次点击
所在节点    程序员
64 条回复
TmacV2
2021-04-08 16:29:53 +08:00
为啥
iRiven
2021-04-08 16:31:42 +08:00
@TmacV2 url 为空的时候直接调用就会抛出 NullPointerException
ignore
2021-04-08 16:34:14 +08:00
真没想到能遇上这样的代码,以前看着别人的截图也就乐乐
xuanbg
2021-04-08 16:44:45 +08:00
这个 catch 是为可能是不合法的或者无法访问的 url 准备的
misaka19000
2021-04-08 16:45:28 +08:00
可能是为了方便在 catch 中处理空指针异常
w4w
2021-04-08 16:51:10 +08:00
遇到 NullPointerException,严禁使用 catch 来隐藏编码错误
LGA1150
2021-04-08 17:00:42 +08:00
@w4w #6
catch 的是 IOException
pkupyx
2021-04-08 17:01:56 +08:00
@xuanbg 这个 catch 应该是管网络 IO 不可用的异常
phpfpm
2021-04-08 17:03:06 +08:00
看完这个帖子,我久久不能平静
LGA1150
2021-04-08 17:05:46 +08:00
@ignore 能把完整代码贴出来么?显式抛 NPE 很可能是为了快速失败( fail-fast )
https://stackoverflow.com/questions/45632920/why-should-one-use-objects-requirenonnull/45632988
ychost
2021-04-08 17:09:32 +08:00
可能完全是为了终止当前语句块,但是又不想终止方法,可以用下面的骚操作实现:
do {
if (url == null) {
break;
}

} while (false)
unicloud
2021-04-08 17:47:16 +08:00
距离发帖过去 1 小时 20 分钟了,现在心情平静了吗?
meteor957
2021-04-08 17:48:44 +08:00
现在平静了吗
altchen
2021-04-08 17:51:31 +08:00
现在平静了吗
楼主你这么容易激动,对不起你这个 ID 啊。:doge
tabris17
2021-04-08 17:51:39 +08:00
背后的原因让人暖心
xuanbg
2021-04-08 17:51:46 +08:00
@pkupyx 对的,url 不为空不代表 url 就正确返回结果,请求出现异常是最正常不过的事情。这时候抛出异常显然不合适,所以要用 try/catch 吃下来 IOException,并通过日志输出异常。
yeqizhang
2021-04-08 17:52:41 +08:00
@LGA1150 #7 赞同这位老哥,这个他手动抛空指针了,后面代码不一定会抛... 所以看情况。这代码确实不太好。11 楼那个看起来更舒服点
ipwx
2021-04-08 17:55:55 +08:00
我觉得这个代码很好啊(前提是出 null 真是异常而不是预期中的错误)。谁知道我一个 null 放后面的库都会干些啥,到时候真有 null 了都不知道怎么调试。
wolfie
2021-04-08 18:01:38 +08:00
唯一槽点,扔到了 try 里面。没啥大问题。
guyeu
2021-04-08 18:04:35 +08:00
感觉没啥毛病啊。。入參不合法还不让抛异常了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/769094

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX