optional

更新时间:2023-01-02 13:41:17 阅读: 评论:0


2023年1月2日发(作者:女人脾气暴躁)

关于optional的orEl和orElGet、orElThrow

前⾔:

Optional

是java8中增加的API,可以很好的解决空指针异常,⽽不⽤我们来进⾏显式的空值检测。

⽐如说

Optional

可以是⼀个为null的容器。

able(null)

isPrent

⽅法当值存在时返回

true

,调⽤

get()

⽅法返回其对象

粗看Java8中的API

Optional

中的⽅法,获取

Optional

中的值⽤

get()

⽅法就可以了,那么和

orEl()

orElGet()

的获取值的⽅法有什么不同

呢?

当我们在IDEA中使⽤

get()

时,IDEA会⾼亮提⽰,此⽅法需要先⽤

isPrent()

进⾏判断,然后再调⽤

get()

⽅法

以前没有推出

Optional

时,我们的代码是这样的

Urur=.....

if(ur!=null){

ers();

}el{

ist();

}

⽽有了

Optional

后代码如果写成下⾯这样,其实并没有多⼤区别

Optionalur=......

if(ent()){

ers();

}el{

ist();

}

那么我们如果正确使⽤

Optional

的获取值的⽅法呢?

就要提到

orEl

orElGet

⽤法

orEl

如果

Optional

实例有值则将其返回,否则返回

orEl

⽅法传⼊的参数

publicTorEl(Tother)

参数:

other

,即需要被返回的值

返回:当只存在时返回值,不存在返回other(可以理解为⾃定义值,如字符串的内容)

例⼦:

//调⽤⼯⼚⽅法创建Optional实例

Optionalname=("Dolores");

//创建⼀个空实例

Optionalempty=able(null);

//创建⼀个不允许值为空的空实例

OptionalnoEmpty=(null);

//如果值不为null,orEl⽅法返回Optional实例的值。

//如果为null,返回传⼊的消息。

//输出:Dolores

n(("Thereissomevalue!"));

//输出:Thereisnovalueprent!

n(("Thereisnovalueprent!"));

//抛NullPointerException

n(("Thereisno

valueprent!");

orElGet

orElGet

orEl

⽅法类似,区别在于得到的默认值。

orEl

⽅法将传⼊的字符串作为默认值,

orElGet

⽅法可以接受

Supplier

的实现⽤来⽣成

默认值

publicTorElGet(Supplier<?extendsT>other)

参数:继承

Supplier

接⼝的

other

,当值为null的时候返回

返回:值存在返回值,值不存在返回

other

异常:当不允许值为空的情况(例如)下值为空时或

other

⽆效抛

NullPointerException

例⼦:

//orElGet与orEl⽅法类似,区别在于orEl传⼊的是默认值,

//orElGet可以接受⼀个lambda表达式⽣成默认值。

//输出:Dolores

n(Get(()->``"it'svalue"``));

//输出:Novalue

n(Get(()->``"Novalue"``));

//抛出NullPointerException

n(Get(()->``"it'svalue"``));

orElThrow

如果有值则将其返回,否则抛出

Supplier

接⼝创建的异常。

publicTorElThrow(Supplier<?extendsX>exceptionSupplier)

throwsXextendsThrowable

参数:

exceptionSupplier

⼀个抛异常的实例化

Supplier

返回:当前值或当值为null抛出异常

异常:当不允许值为空的时候以及

exceptionSupplier

为空抛

NullPointerException

;值为空抛

Supplier

继承的异常

例⼦:

try{

//orElThrow与orEl⽅法类似。与返回默认值不同,

//orElThrow会抛出lambda表达式或⽅法⽣成的异常

Throw(DemoException::new);

}catch(Throwablethrowable){

//输出:Hereismessage

n(ng());

}

try{

Throw(DemoException::new);

}catch(Throwablethrowable){

//输出:Exceptioninthread"main"interException的详细信息

n(tackTrace());

}

以下是⾃定义的

DemoException

classDemoExceptionextendsThrowable{

publicDemoException(){

super();

}

publicDemoException(Stringmsg){

super(msg);

}

@Override

publicStringgetMessage(){

return"Hereismessage";

}

}

总结

总的来说,

orEl

orElGet

⽅法差不多,两者都会返回定义的内容,前者是字符串,后者是实现了

Supplier

的内容;并且后者会在不允许值为

空或

other

⽆效的情况抛

NullPointerException

异常

本文发布于:2023-01-02 13:41:17,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/78057.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:filling
下一篇:conditional
标签:optional
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图