引言
Optional意为可选,我们前面已经提及过,主要是为了替代null的使用,避免空指针异常(NullPointerException)的出现。譬如定义下面一个类A:
class A {
private String name;
public String getName() {
return name;
}
如果我调用它的getName方法获取name字段并进行后续操作,就将会发生异常。因为我并没有为A写一个构造方法,所以name字段将会为空,如果此时对结果进行操作,比如调用length方法,将会抛出一个空指针异常,这就会很恼人。在没有Optional接口之前,我们常用的避免异常发生的方法是添加一个硬性检查。
例4.0:
String name=new A().getName;
if(name!=null)
System.out.println(name.length());
空城流云 Optional接口
上述代码并不是一个美观的写法,因为总是要在执行命令前进行检查,就好像套了一个try-catch块一样冗余丑陋。为了可以消除这样的样板代码,J8提供了Optional接口,利用它可以写出函数式风格的代码来,比如下面的变形。
例4.1:
Optional oa=Optional.ofNullable(new A());
oa.map(A::getName)
.map(String::length)
.ifPresent(System.out::println);