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 吧
不是十分的优雅,不过没觉得有太大的问题。
不晓得