题主先不下结论,给出一些例证,每个看官自己体会有没有加的必要,先贴出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()