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

标签 java c# nullpointerexception null

<分区>

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

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

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

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

但是,在 null 的情况下,特别是 抛出 NullPointerException 不是多余的吗?这与稍后让运行时自己抛出 NullPointerException 有何不同?

注意:我以一种语言不可知的方式提问,因为模式本身可以应用于 Java 和 C#。

最佳答案

因为这个问题有C#标签,所以我会回答C#案例。在这种情况下,访问空指针时抛出的是NullReferenceException,而参数为null时通常抛出的是ArgumentNullException。但更重要的是,当您显式检查参数时,您:

  1. 尽快抛出异常,而不是在突然访问空指针时在方法中间的某个地方。
  2. 您是在明确说明什么是 null。在 C# 中,至少当 NullReferenceException 被抛出时,您只能猜测到底什么是 null 以及它在哪里。

关于java - 为什么在参数为 null 时抛出 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197854/

相关文章:

JavaFX ScrollPane - 加速触摸设备上的滑动效果

c# - asp.net MVC 验证出错时如何保留值?

c# - Access插入数据库时​​出现SQL语法错误

java - Android - 获取动态生成的按钮的ID

java - 在 Maven 中运行 JUnit 测试,无需构建和复制文件

java - Eclipse 中的 Jar 依赖项 - 2 个外部 jar 中的同一类

java - ServletContext.getRealPath() 在 Tomcat 7 上返回 null

c# - 如何从 telnet 或 SSH 访问 c# 套接字服务器?

java - 使用 java.sound.sampled.Clip 播放声音文件的正确方法是什么

Java NullPointerException 排序数组