每当我必须检查方法的给定参数是否不为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

09-10 05:22
查看更多