Java Objects.requireNonNull

在学习java动态代理,看到Proxy类中Objects.requireNonNull(T)Objects.requireNonNull(T obj, String message)来判断传入方法的参数是否为null并抛出异常信息

例如:

public void doSomething(String customerName, Integer age) {
    Objects.requireNonNull(customerName, "customerName cannot be null");
    Objects.requireNonNull(age, "age cannot be null");
    ...
}

但这和使用if(obj==null)判断是否为null的有什么差别呢

其实javaAPI文件就有说明了,主要就是用来验证方法输入参数是否为null,例如之前通常写法如下:

public Foo(Bar bar) {
    if(bar == null) {
        throw new NullPointerException();
    } else {
        this.bar = bar;
    }
}

有这个方法泽可以写为:

public Foo(Bar bar) {
    this.bar = Objects.requireNonNull(bar);
}

一旦传入的参数为null,会抛出NullPointerException

Objects.requireNonNull(T)Objects.requireNonNull(T obj, String message)是Java 7才加入的工具类,源码如下:

public static  T requireNonNull(T obj) {
    if (obj == null)
        throw new NullPointerException();
    return obj;
}

public static  T requireNonNull(T obj, String message) {
    if (obj == null)
        throw new NullPointerException(message);
    return obj;
}

若传入的参数不为null,则返回原参数,因此可确保传入的参数不为null

简言之就是不需要每次都要自己用if()判断传入参数是否为null了,

好处是可读性佳,从名称就可以清楚知道的接收得参数应为null,且可直接给定错误信息。搭配写在方法的开头位置,可链到fail-fast的设计目的

 

而java 8 可以用Optional.of(T val)替代,例如:

public Foo(Bar bar) {
     this.bar = Optional.of(bar).get();
     // or
     this.bar = Optional.of(s).orElseThrow(() -> new NullPointerException("bar cannot be null"));
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值