心血来潮更新下 , 平时看到报黄就顺手处理完了就没留意 , 想起来一点更一点
网上千篇一律都是这么写的:
其返回的是Optional类型,该类型是为了规避NULL错误。
应该使用orElse(“如果值为null的替代值”) 替代 get() 。
为什么?IDEA给出的提示
'Optional.get()'方法缺少'Optional.isPresent()'方法的检查
*isPresent()方法通过返回boolean值来在get()之前判断是不是有值
检查提示信息 : 你在调用Optional.get()方法之前没有提前对optional对象进行一个判断 : 判断对象里有没有东西。如果optional是空的,你调用 Optional.get() 将会抛出一个异常
代码优化过程
// 报黄代码
User user = refUserOptional.get();
既然是缺少判断,我就蹩脚加一个简单的判断:
User user =
refUserOptional.isPresent() ? refUserOptional.get() : null
// 意思就是先判断是否存在,存在即true,然后get()拿到内容
// 若不存在就null
还是报黄 , 提示有现成的方法可以替代 :
User user =
refUserOptional.orElse(null);
// 意思是一样的,就是你不用写那么长了,直接用orElse就行,
// 如果optional没东西就返回null , 你要返回别的在括号里造 , 但是类型要对上
// 比如我这个是User , 那我 orElse( 这里要填User类型的 )
额外做一下Optional的科普
Optional是什么
Java8带来的一个类 ,属于java.util包下的(java.util.Optional类)
本文报黄的get()方法用于获取该Optional实例(userOptional)的值。
如果userOptional实例中不存在任何值,直接用userOptional调用get()会报NoSuchElementExcpetion无此元素异常
Optional.get()
参数 : 无 , 不能传参
返回 : Optional类的实例的值
举例 :
public static void main(String[] args)
{
// 创建一个Optional对象
Optional<Integer> optional = Optional.of(520);
// 直接打印optional对象
System.out.println("Optional: " + optional);
// 打印optional.get()
System.out.println("Value of this Optional: "+ optional.get());
}
}
"控制台打印结果"
直接打印optional : Optional[520]
打印optional.get(): 520
如果Optional是空的,此时再分别打印optional和optional.get() :
"控制台打印结果"
直接打印optional : Optional.empty
打印optional.get(): java.util.NoSuchElementException: No value present
除了检查获得的内容是否为空/合法外, 也可以用来检查参数↓