Android编程知识

Object.requireNonNull

2023-05-19 309 0

简介 Object.requireNonNull是用于参数有效性检查的API。 使用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"));
}
 


源代码:

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

点赞 0

我的名片

网名:梦宇信息技术

职业:软件开发、Mes系统工程师

现居:福建省-福州市

QQ:703159

站点信息

  • 联系QQ:703159
  • 文章统计97篇文章
  • 标签总数6
  • 加我微信:扫码,加我微信