关于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
后代码如果写成下⾯这样,其实并没有多⼤区别
Optional
if(ent()){
ers();
}el{
ist();
}
那么我们如果正确使⽤
Optional
的获取值的⽅法呢?
就要提到
orEl
和
orElGet
了
⽤法
orEl
如果
Optional
实例有值则将其返回,否则返回
orEl
⽅法传⼊的参数
publicTorEl(Tother)
参数:
other
,即需要被返回的值
返回:当只存在时返回值,不存在返回other(可以理解为⾃定义值,如字符串的内容)
例⼦:
//调⽤⼯⼚⽅法创建Optional实例
Optional
//创建⼀个空实例
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
接⼝创建的异常。
public
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小时内删除。
留言与评论(共有 0 条评论) |