每当我必须检查方法的给定参数是否不为null时,我都会编写一个null检查,如果null检查失败则抛出 IllegalArgumentException
:
if (user == null) {
throw new IllegalArgumentException("User can't be null.");
}
但是,通过阅读某些Java 8类的源代码(例如
ArrayList
),我发现Oracle使用 Objects.requireNonNull
来检查参数是否为空值,然后,如果测试失败,则会抛出 NullPointerException
。这样,通过采用以下方法,早期的代码片段应如下所示:
Objects.requireNonNull(user, "User can't be null.");
更小,更易读。
假设我可以控制系统的整个异常处理(即使我不应该控制,有时处理这些未经检查的异常也是业务的一部分),应该将
IllegalArgumentException
替换为NullPointerException
并使用Objects.requireNonNull
代替编写我自己的null检查和异常抛出? 最佳答案
使用Objects.requireNonNull(c)
是一种非常优雅的检查元素是否不为null的方法。但是,对于选择NullPointerException
还是IllegalArgumentException
-> IllegalArgumentException or NullPointerException for a null parameter?进行了有趣的讨论。因此,抛出NullPointerException
是表示引用为null的java方法。
否则,您可以创建自己的方法requireNotNull()
。很简单 :
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
您可以通过
NullPointerException
更改异常IllegalArgumentException
。