作为一个程序员,经常遇到的问题就是空指针异常,为了避免这个异常,代码中会出现非常多的空值判断,也因此引入了大量的if else进行控制判断,java 8 中提供了Optional类来解决空指针的问题。那么Optional类有什么用呢?
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。
如果有2个参数,进行相加求和,我们之前的做法:
Integer a = null;
Integer b = 10;
System.out.println(a+b);
结果:
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:10)
从结果可以看出,如果有一个参数为null,求a+b的和就会报空指针,我们就需要判断a和b的值不为空。
if(null != a && null != b) System.out.println(a+b);
这样的话代码中可能会出现非常多的if else ,代码看起来非常的乱。
现在有了Optional类,那我们怎么做呢?
现在做法:
Integer a = null;
Integer b = 10;
Optional<Integer> c = Optional.ofNullable(a);
Optional<Integer> d = Optional.of(b);
System.out.println(c.orElse(new Integer(0))+d.get());
结果:
10
大家看结果是10,并没有出现空指针的异常被抛出来, Optional.ofNullable(a),ofNullable这个方法就是
允许a为null, Optional.of(b),这句的是如果b为null,就会抛出空指针异常,c.orElse(new Integer(0))这句
的意思就是c的值如果为null,就会使用默认值new Integer(0),这样的话,a+b的值就是new Integer(0)+10.
因此如果我们使用Optional类就可以解决很多的空指针问题了。
Optional类还有很多方法,比如isPresent()方法:
Integer a = null;
Integer b = 10;
Optional<Integer> c = Optional.ofNullable(a);
Optional<Integer> d = Optional.of(b);
System.out.println("c的值是不是null:"+c.isPresent());
System.out.println("d的值是不是null:"+d.isPresent());
结果:
c的值是不是null:false
d的值是不是null:true
从结果可以看出如果值不是null,就会返回true,否则就会返回false,
这是 isPresent()方法的源码:
public boolean isPresent() {
return value != null;
}
正好验证了我们的猜测。
当然了Optional还有其它的方法,就不一一举例了,这个小技巧大家学到了吗?