Exception 在方法开始时抛出NPE以进行错误检查

Exception 在方法开始时抛出NPE以进行错误检查,exception,error-handling,nullpointerexception,Exception,Error Handling,Nullpointerexception,所以我在准备采访,在盖尔·拉克曼斯职业杯的一段视频中,一个家伙正在写一个简单的方法,它接受一个数组并用它做一些事情。她提到他缺乏错误检查,所以他在这行中加了这样的话: public int max(int[] array) { if (array == null) throw new NullPointerException(); //method body } 像这样手动抛出NPE异常是否正确,该异常将在方法体中被抛出,因为它将在某个点使用数组引用 我可以

所以我在准备采访,在盖尔·拉克曼斯职业杯的一段视频中,一个家伙正在写一个简单的方法,它接受一个数组并用它做一些事情。她提到他缺乏错误检查,所以他在这行中加了这样的话:

public int max(int[] array) {
    if (array == null)
        throw new NullPointerException();

    //method body

}
像这样手动抛出NPE异常是否正确,该异常将在方法体中被抛出,因为它将在某个点使用数组引用


我可以看到,这种方法的一个可能优点是,它将输入无效与方法逻辑无效分离,并以某种方式创建空引用。否则会有点混乱,也许IllegalArgumentException会更好?

在输入方法时立即抛出NullPointerException,而不是在完成某些处理后等待检测它,这没有什么错。如果该方法将失败,那么它也可能快速失败

Joshua Bloch的高效Java建议在这种情况下抛出NullPointerException而不是IllegalArgumentException第60项:支持使用标准异常

若调用者在某个参数中传递null,而该参数的null值是被禁止的,那个么按照惯例,将抛出NullPointerException而不是IllegalArgumentException


当传入非法的非null值时,应抛出IllegalArgumentException。

只要输入该方法,就抛出NullPointerException,而不是在完成某些处理后等待检测它,这没有什么错。如果该方法将失败,那么它也可能快速失败

Joshua Bloch的高效Java建议在这种情况下抛出NullPointerException而不是IllegalArgumentException第60项:支持使用标准异常

若调用者在某个参数中传递null,而该参数的null值是被禁止的,那个么按照惯例,将抛出NullPointerException而不是IllegalArgumentException


当传入非法的非空值时,应引发IllegalArgumentException。

还可以查看java自己的实用程序类java.util.Objects:

类型参数: T-引用的类型

参数: obj-用于检查空值的对象引用 message—在引发NullPointerException的事件中使用的详细消息

返回: obj如果不为空

抛出: NullPointerException-如果obj为null 从

结论
您是否使用该实用程序类是另一个问题,但它明确表明,Java语言背后的团队打算将NullPointerException用于这些目的。

还可以看看Java自己的实用程序类Java.util.Objects:

类型参数: T-引用的类型

参数: obj-用于检查空值的对象引用 message—在引发NullPointerException的事件中使用的详细消息

返回: obj如果不为空

抛出: NullPointerException-如果obj为null 从

结论 是否使用这个实用程序类是另一个问题,但它明确地表明,Java语言背后的团队打算使用NullPointerException实现这些目的

public static <T> T requireNonNull(T obj,
               String message)
 public Foo(Bar bar, Baz baz) {
     this.bar = Objects.requireNonNull(bar, "bar must not be null");
     this.baz = Objects.requireNonNull(baz, "baz must not be null");
 }