每当我检查一个方法的给定参数是否不为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.");
更小,更可读.
假设我控制了系统的整个异常处理(即使我不应该,有时它是处理这些未经检查的异常的业务的一部分),我应该用NullPointerException替换我的IllegalArgumentExceptions并使用Objects.requireNonNull而不是写我自己的null检查和异常抛出?
解决方法
使用Objects.requireNonNull(c)是一种非常优雅的方式来检查元素是否不为空.但是有一个有趣的讨论是关于选择NullPointerException还是IllegalArgumentException – >因此抛出NullPointerException是表示引用为空的java方式.
否则,您可以使用自己的方法requireNotNull().很简单 :
public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }
并且您可以通过IllegalArgumentException更改异常NullPointerException.