每当我需要检查方法的给定参数不为空时,我都会编写一个空值检查并在空值检查失败时抛出IllegalArgumentException
异常:
if (user == null) {
throw new IllegalArgumentException("User can't be null.");
}
然而,通过阅读一些 Java 8 类的源代码,如
ArrayList
,我发现 Oracle 使用 Objects.requireNonNull
来检查参数是否为 null 值,如果测试失败,则抛出 NullPointerException
。采用这种方法后,前面的代码片段应该像这样:
Objects.requireNonNull(user, "User can't be null.");
更小和更易读。
假设我控制整个系统的异常处理(即使我不应该有这种控制,有时处理这些未经检查的异常是业务的一部分),我是否应该用 NullPointerException
替换我的 IllegalArgumentException
,并使用 Objects.requireNonNull
而不是编写自己的空检查和异常抛出?
NullPointerException
。 Joshua在他的书中已经表明了对NPE
优先于IAE
的偏好,并且通过阅读您关于JDK未来的言论,我认为我有足够的证据去那条路。顺便说一句,@OSryx的答案仍然有效,可以实现另一种类型的参数检查。 - Bruno GasparottoObjects.requireNonNull()
的 API 允许你在链式的this()
或者super()
调用中使用它,例如:super(requireNonNull(x))
。 - Brian Goetz