java是面向对象的语言,在调用对象的某个方法前如果不判断对象是否为null,有可能抛出NullPointerException
如下的计算两个整数值之和
@Test
public void nullTest() {
Integer num1 = null;
Integer num2 = 5;
Integer num3 = num1+num2; // 此处抛出异常 java.lang.NullPointerException
}
如果在定义对象的时候就可以进行必要的判断,尽早发现并抛出异常,而不是参与运算的时候才抛出
可以自定义工具类做校验,而guava的Optional类已经实现了该功能
@Test
public void nullOptionalTest() {
Optional<Integer> num1 = Optional.of(null); // 此处抛出异常 java.lang.NullPointerException
Optional<Integer> num2 = Optional.of(5);
Integer num3 = num1.get() + num2.get();
}
代码分析:
Optional是一个抽象类,实现类有两个Present和Absent
调用Optional.of方法时,实际返回的是实现类Present
/**
* Returns an {@code Optional} instance containing the given non-null reference.
*/
public static <T> Optional<T> of(T reference) {
return new Present<T>(checkNotNull(reference));
}
public static <T> T checkNotNull(T reference) {
if (reference == null) { // 为null时将抛出NullPointerException()
throw new NullPointerException();
}
return reference;
}