Object.requireNonNull
Object.requireNonNull介绍
Object.requireNonNull是用于参数有效性检查的API。
使用Object.requireNonNull方法的好处在于可以显式的指定在哪里抛出异常。
举个栗子
public class Foo {
private List<Bar> bars;
public Foo(List<Bar> bars) {
// 在此对入参进行校验
Objects.requireNonNull(bars, "bars must not be null");
this.bars = bars;
}
}
public class Bar{
private String name;
public String getName() {
return name;
}
}
用new创建出来的Foo对象可以确保bar不是null。
加入不使用该API:试想一下不小心传了一个null给bars。等你在其他地方调用这个Foo对象里的方法的时候抛出了null pointer的异常,JVM只会告诉你这个语句出了空指针异常:
bars.get(0).getName().contains(“xxxx”)
但是并不知道是bars为null,还是bars.get(0)为null,还是bars.get(0).getName()为null。
在构造方法里面使用Objects.requireNonNull能让我们尽早知道错误,从而达到fail-fast的设计目的。
java8中的优化写法
public Foo(Bar bar) {
this.bar = Optional.of(bar).get();
// or
this.bar = Optional.of(s).orElseThrow(() -> new NullPointerException("bar cannot be null"));
}
Object.requireNonNull源码
源代码:
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}