我已经注意到Oracle JDK中的许多Java 8方法使用Objects.requireNonNull(),如果给定的对象(参数)为空,它会在内部抛出NullPointerException。
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
但是如果空对象被解引用,无论如何都会抛出NullPointerException。那么,为什么要做这个额外的空检查并抛出
NullPointerException吗?
一个明显的答案(或好处)是它使代码更具可读性,我同意这一点。我很想知道使用的其他原因
方法开头的Objects.requireNonNull()。
NPE(空指针异常)是在你访问一个对象的成员时抛出的。Objects.requireNonNull()从访问值的位置回溯到初始化为null的位置,因此可以关注NPE的真正来源。
一个最简单的场景:
// Global String
String nullString = null;
调用空值:
public void useString() {
nullString.length(); // The source of exception, without using Objects.requireNonNull()
}
现在如果我们在初始化时使用Objects.requireNonNull():
// Global String
String nullString = Objects.requireNonNull(null); // The source of exception which is indeed the actual source of NPE