为什么在参数为null时抛出NullPointerException?

Son*_*ngo 1 c# java null nullpointerexception

我在Stackoverflow上多次看到这段代码:

public void doStuff(Object anObject) {  
    if (anObject == null) {  
        throw new NullPointerException("anObject can't be null");   
    }  
    //rest of the function
}
Run Code Online (Sandbox Code Playgroud)

这是一个针对null参数的保护子句,因为传递null给需要参数为非null的函数将导致a NullPointerException.

我理解保护条件在其他情况下验证参数的重要性(即检查日期范围,负货币值,无效字符串大小等).

但是,在null 具体情况下是不是NullPointerException多余的?这与NullPointerException后来运行时抛出一个不同之处有什么不同?

注意:我用语言无关的方式询问,因为模式本身可以应用于Java和C#.

Evk*_*Evk 7

由于这个问题有C#标签,我将回答有关C#的案例.在这种情况下,当您访问空指针时抛出的内容是NullReferenceException,并且当参数为null时通常抛出的内容是ArgumentNullException.但更重要的是,当您明确检查参数时,您:

  1. 当你突然访问空指针时,尽快抛出异常,而不是在方法中间的某处.
  2. 你明确地说什么是null.在C#中,至少在NullReferenceException抛出时你会猜到究竟是什么,以及在哪里.