有没有必要使用Objects.requireNonNull()对null值进行判断?

题主先不下结论,给出一些例证,每个看官自己体会有没有加的必要,先贴出requireNonNull这个方法。

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

可以很清晰的看到,当传入的值为null时,会抛出空指针异常。
在这儿肯定会有很多人觉得,不加也是抛出,那加的意义又在哪呢?先来看一下下面的伪代码:

 	public void send(String type) {
        Objects.requireNonNull(type.split(","));
    }

对于上面这种情况加不加都是一样,都会在执行type.split()时抛出NPE,当然或许能让报错信息更优雅点。

public void send(String type) {
        Objects.requireNonNull(type.split(","), "type不能为空");
    }

再来看下面一段代码:

public void send(String type) {
        Objects.requireNonNull(type, "参数不能为空!");
        testA(type);
    }
    private void testA(String type) {
        testB(type);
    }
    private void testB(String type) {
        System.out.println(type.split(","));
    }

是不是觉得send方法中的requireNonNull是很有必要了,当不加的时候或者只有在运行时,在testB中才会抛出空指针。

说直白一点Objects.requireNonNull就是一个jdk提供的快速判断是否为null的工具,它的思想是快速失败,提前失败,而不是当程序运行时才失败,这或许也是运行时异常不用显式捕获的原因吧,所以要尽量提前快速失败,而不要当程序运行到中途时。

贴上一个小细节:
在这里插入图片描述

最后附上一个stackFlow中关于此话题的讨论,有兴趣的小伙伴可以去看看。
为什么要用Objects.requireNonNull()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值