Java8的新特性提供了一个能够容纳null的容器类,能够很好的处理空指针异常等状况,用处极大。

简介

Optional类是一个容器类,它能够保存模板类型T的值,也能够保存null。

——假定值存在,调用isPresent()回来tureelement滑板,这时调用get()即可回来容器中保存的政策,经过这种办法咱们就不需求独自进行空指针异常,还方便了appointment函数式编程

有什么APP用?

考虑一下:为什么说处理了空指针异常的问题?

在Java8从前,在调用政策时都需求验证其是否为null,像这种办法很有或许导致空指针异常:

Str接口测验ing njavaeeame = student.getI函数式编程思想nfo().getName();

为了防止抛出异常,需求进行验证:

{
....
if(student!=null)elementanimation{
Info info = student.getInfo();
if(info!=null){
String name = info.getName();
return namappeare;
}
}
...
}

太麻烦函数式编程思想了!!

而JDK8所引入的Optional类能够让悉数变得简略。

不信?Show you the code:

{
......
Stuappointmentdent student =Stud接口类型ent().builder()......Elementbuild();
Optional<St接口测验的流程和过程udent> studentOp=Optional.ofNullable(student);
Info info = new函数式编程和面向对象的区别 Inelements翻译fo();
studentOp.ifPresent(stu->{info =stu.getInfo();};
...
}

如上所示,optional提供了一种简练的防止空指针异常,以及典雅地获取容器类值的办法,而且还支撑lambda函数式编程

其他办法

来看看Oapproveptional还有其他哪些值得一提的API。

of及ofelementuiNull

用Optional实例.of()的操作只能接受非空参数,否则会报空指针异常;

而用.ofNullable()则没有这样的束缚,空与非空都可接受,依据实践场景来选择:

Student student=null;
//会报错
Optional<Student> stuOp=Optional.of(student);
//不会报错
Optional<Student> stuOp=Optional.ofNullable(student);

java开发为oelements翻译fNull函数式编程的长处ableappear在空值的时分也能够正常接收,因此在运用elementui的时分要注意到底允不允许这样的null值存在,而且在运用前能够运用下面的API进行验证。

isPresent、ifPresent

isPresenelementaryt()能够用来验证Optional实例中的值是否有值,若为null则回来false,其实isPresent就等同于一个对Opt接口测验ional容器中政策的if语句

ifPresent()是一种函数式编程apple接口:假定Optional中为非null,则调用consumer接口类型函数。consumer是指继承自Consumer类的笼统办法,能够对传入的数据进行处理,其他能够直接运用lambda表达式

形如上式的:

studentOp.ifPresent((stu)->{info =stu.getjava怎样读Info()});

假定studentOp中的elementary是什么意思Student政策不为null,则将该政策作为stuAPP进行java模拟器相应的运算,大大简化了程序

get

接口英文办法用来回来Optional中的值,假定为null,则会抛出异常:NoSuchElemejavascriptntException、

orElse与or接口测验的流程和过程ElseGeappearancet

orElse用来回来Optionajava怎样读l实例中的值,假定为null,则回来给定的elements翻译值。如:

st接口的作用udentOp.orElse(println(函数式编程言语排行榜"hello!"));

orElseGet则有一些不同,orElseGet支撑运用lambda表达式,完结自定义输出

map

map办法能够完结对Optional实例进行连续操作,假定optiona函数式编程l中有值,就调用mapping函数得到回来值。且application若回来值不为null,则回来的是包括mapping函数回来值值的Optional。否则回elementary是什么意思来空Optional。

map函数能够运用lambda表达式。map函数能够说是appointment用处极大,而且结合orEljava初学se或者ifPresent能够完结酷炫的函数式编程。简略给个比方如下:

.......studeelement什么意思中文nappletOp....
prtintln(studentOp.map((info)->info.setName("I'm xiaoming")).orElse("I'm King!"));