看完这块代码,我久久不能平静
try { …. if(url == null) { throw new NullPointerException(); } …. } catch (IOException e) { e.fillInStackTrace(); }
try { …. if(url == null) { throw new NullPointerException(); } …. } catch (IOException e) { e.fillInStackTrace(); }
} while (false)
不过一般是返回自定义错误,而不是返回 空指针异常
第二,< try { …. } catch (IOException e) { e.fillInStackTrace(); >,这是明显的吃掉异常的行为,非常新手或者不负责任的行为。
除此之外,没有代码上下文,唯一可能出问题的就是把 IOException 掩盖掉的问题。
@guyeu C# visual studio 对传入参数的代码建议也包含 if(x == null) throw new NullReferenceException(nameof(x)),和 java 的思想一致。
如果不做显式校验,而是使用到这个参数时依靠 jvm 自动报错:
1 、会晚; 2 、是一个业务无关的异常; 3 、随着重构的进行,入参和参数使用的位置可能会很远,甚至不在同一个方法
if (url == null) throw new ArgumentNullException(nameof(url));
么