在错误检查方法的开头抛出NPE

时间:2013-04-12 10:28:02

标签: exception error-handling nullpointerexception

因此,我准备接受采访,并在Gayle Laakmans职业杯视频中的一个人正在编写一个简单的方法,它采用数组并用它做一些事情。她提到他缺乏错误检查,所以他就像这样添加这一行:

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

    //method body

}

手动抛出这样的NPE异常是否正确,此异常将在方法体中抛出,因为它将在某些时候使用数组引用。

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

2 个答案:

答案 0 :(得分:3)

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

Joshua Bloch的 Effective Java 建议在这种情况下抛出NullPointerException IllegalArgumentException(第60项:赞成使用标准例外)。

  

如果调用者在某些禁止空值的参数中传递null,则约定表示抛出NullPointerException而不是IllegalArgumentException

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

IllegalArgumentException

答案 1 :(得分:1)

另请参阅java自己的实用工具类java.util.Objects

public static <T> T requireNonNull(T obj,
               String message)

检查指定的对象引用是否为null,如果是,则抛出自定义的NullPointerException。此方法主要用于在具有多个参数的方法和构造函数中进行参数验证,如下所示:

 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");
 }
  • 类型参数:
    T - 参考的类型

  • 参数:
    obj - 检查无效的对象引用
    消息 - 在抛出NullPointerException的情况下使用的详细消息

  • 返回:
    obj 如果不为空

  • 抛出:
    NullPointerException - 如果obj为null

来自https://docs.oracle.com/javase/7/docs/api/java/util/Objects.html

结论

您是否使用此实用程序类是另一个问题,但它肯定表明,Java语言背后的团队打算使用 NullPointerException 来实现这些目的。