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;
}

猜你喜欢

转载自blog.csdn.net/weixin_38370441/article/details/113476538