编程随笔-SpringBoot | 15.Objects.requireNonNull方法说明

0.参考

参考文章:Objects.requireNonNull方法说明

1.源码

/**
 * Checks that the specified object reference is not {@code null}. This
 * method is designed primarily for doing parameter validation in methods
 * and constructors, as demonstrated below:
 * <blockquote><pre>
 * public Foo(Bar bar) {
 *     this.bar = Objects.requireNonNull(bar);
 * }
 * </pre></blockquote>
 *
 * @param obj the object reference to check for nullity
 * @param <T> the type of the reference
 * @return {@code obj} if not {@code null}
 * @throws NullPointerException if {@code obj} is {@code null}
 */
public static <T> T requireNonNull(T obj) {
    if (obj == null)
        throw new NullPointerException();
    return obj;
}

该方法是Objects类的一个静态方法,当参数值为空值时,直接抛出NPE

2.为什么使用这个方法?

该方法的作用是进行非空检查,如果参数值为null,抛出NPE

但就算不使用该方法,程序也同样会抛出NPE,为什么还要使用这个方法呢?

原因在于:遵循Fail-Fast编程思想,让错误尽可能早的出现,不要等到很多工作执行到一半才抛出异常。

以下方代码为例:

public void methodA(String paramA){
	methodB(paramA);
}



public boolean methodB(String paramA){
    //省略一部分代码...
    if(paramA.contentEquals("A")){
        return true;
    }else{
        return false;
    }
}

如上有methodA和methodB两个方法,methodA以paramA作为参数,调用methodB

如果不使用Objects.requireNonNull方法,那么在传入空值时,methodB的前半部分代码都会被执行并不会抛出异常,直到执行至第九行,方法才会抛出异常。

这样在DEBUG时,会耗费更多不必要的时间,而且前面的执行便完全失去了意义。

如果使用Objects.requireNonNull对paramA进行非空检查,即:

public void methodA(String paramA){
    methodB(Objects.requireNonNull(paramA));
}

那么程序在执行到第二行,且未执行methodB时,便已经抛出了异常。这样当我们进行DEBUG时就会明确许多,少走许多弯路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值