欢迎来到我司精密电阻产品网站!
请不要使用它! = null为空
精密电阻 2024-11-25

作者:诗意的凌峰| http://suo.im/5t3akh在没有空引的情况下使用Optional句子,您还喜欢以下代码在同一句子中为空吗?如果是这样,请看一下Optional相对于传统null确定的优势。

Java8的Optional为空,简化了空确定的操作为什么在传统类中为什么将Optional用于空确定?它是什么?您还看过上面的图片。

一旦代码量变大并且条件增加,代码将变得非常冗余且难以维护。

然后,我们此时需要了解Optional。

Optional类是一个可以为null的容器对象。

如果该值存在,则isPresent()方法将返回true,而调用get()方法将返回该对象。

可选的是容器:它可以保存T类型的值,或者仅可以为null。

Optional提供了许多有用的方法,因此我们无需显式检查空值。

Optional类的引入是对空指针异常的一个很好的解决方案。

可选的方法,如下图所示,java8的可选判断,简化的空判断可选方法-图1 java8的可选判断,简化的空判断可选方法-图2需要多说一些关于别人的事情。

我相信你们所有人都会一目了然;如何使用它,我将使用代码进行演示,请继续。

可选示例1.of:为非空值创建一个Optional。

of方法通过工厂方法创建Optional类。

应该注意的是,创建对象时传入的参数不能为null。

如果传入参数为null,则将引发NullPointerException。

可选可选= Optional.of(“ xiaoming”); //传入null并抛出NullPointerException可选o = Optional.of(null); 2.ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。

可选o1 = Optional.ofNullable(null); 3.isPresent:如果该值存在,则返回true,否则返回false。

可选optiona2 = Optional.of(“ xiaoming”); System.out.println(optiona2.isPresent()); 4.get:如果有值,则返回可选值,不抛出NoSuchElementException。

可选o1 =可选.ofNullable(null); System.out.println(o1.get()); 5.ifPresent:如果Optional具有值,则调用使用者以进行处理,否则不处理Optional o1 = Optional.ofNullable(null); o1.ifPresent(s-> System.out.println(s)); 6.orElse:如果有一个值,则将其返回,否则返回其他指定值可选。

ofNullable(null); System.out.println(o1.orElse(“ output orElse”))); //输出orElse 7.。

orElseGet:orElseGet与orElse方法类似,不同之处在于获得的默认值。

orElse方法使用传入的字符串作为默认值,而orElseGet方法可以接受Supplier接口的实现以生成默认值。

System.out.println(o1.orElseGet(())->“默认值”)); //默认值*注意:orElse和orElseGet看起来很相似,但实际上它们是完全不同的;请看以下示例Shop shop = null; System.out.println(“ testorElse”); Optional.ofNullable(shop).orElse(createNew()); System.out.println(“ testorElseGet”);可选。

ofNullable(shop).orElseGet(()-> createNew()); // createNewprivate静态Shop createNew(){System .out.println(“ create new”); return new Shop(“ stockings”,50);} //输出:测试orElsecreate newtest orElseGetcreate newShop shop = new Shop(“长袜”,100); System.out。

println(“ testorElse”); Optional.ofNullable(shop).orElse(createNew()); System.out.println(“ testorElseGet”); Optional.ofNullable(shop).orElseGet(()-> createNew( )); ///输出测试orElsecreate newtest orElseGet从上面的两个示例中,您可以看到,当Optional为空时,orElse和orElseGet差别不大,但是当Optional具有值时,orElse仍将调用该方法来创建该对象,而orElseGet没有。

该方法将再次被调用;当我们处理的业务数据量很大时,两者的性能将有很大的不同。

8.orElseThrow:如果有值,则将其返回,否则抛出由供应商接口创建的异常。

可选o1 =可选.ofNullable(null); try {o1.orElseThrow(()-> newException(“ Exception!”)));} catch(Exception e){System.out.println(“ info:” ; + e。

getMessage());} //输出:info:异常! 9.map:如果有一个值,则执行它并调用映射函数以获取返回值。

如果返回值不为null,则创建一个Optional,它包含映射的返回值作为map方法的返回值,否则返回一个空的Optional。

可选可选= Optional.of(“ xiaoming”);字符串s = o