Always keep a|

奕帆卷卷

园龄:1年4个月粉丝:3关注:0

Optional容器对象

Optional容器对象

介绍

Optional是一个容器对象,是java8引入新引进的类,可以用来解决 空指针异常

本质上这是一个包含可选值的包装类,所以Optional类可以含有对象也可以为空,Optional是Java实现函数式编程的强劲一步,并且帮助在范式中实现。但是本质尚Optional是一个包装器类,其中包含对其他对象的引用,在这种情况下,对象只是指向内存位置的指针,并且也可以指向任何内容,从其他角度来看,Optional提供了一种类型级解决方案来表示可选值而不是空引用。

在Java8之前,我们将返回null而不是Optional。这种方法我们要确保不会出现空指针异常,则需要对每个引用进行显式的空检查。

if (user != null) {
Address address = user.getAddress();
if (address != null) {
Country country = address.getCountry();
if (country != null) {
String isocode = country.getIsocode();
if (isocode != null) {
isocode = isocode.toUpperCase();
}
}
}
}

用法

Optional特性
Optional类提供了大约10种方法,我们可以使用他们来创建和使用Optional类

创建实例方法

以下为创建可选实例的三种创建方法。

创建一个Optional类
返回一个空的Optional实例

//Optional<T> [Optional]<T>[empty]()
Optional<String> empty = Optional.empty();

在返回一个空的{Optional}实例时,Optional的值不存在。不过如果对象为空,请避免与Optional.empty()返回的实例的{==}比较。因为不能保证他是一个单例,反之,应该使用isPresent().

返回特定的非空值Optional

String name = "java";
Optional<String> opt = Option.of(name)

静态方法需要一个非null参数,否则将引发空指针异常,因此如果我们不知道参数是否为null,那就使用ofNullable,下面将对此进行介绍。

返回描述指定值的Optional,如果非空,则返回空值

Optional<String> optional = Optional.ofNullable(name());
private String name(){
String name ="Java";
return (name.length()>5)?name:null;
}

如果我们传入一个空引用,他不会抛出异常,而是返回一个空的Optional对象;

检查值用法

布尔值[isPresent]

如果存在值则返回true值,反之,返回fasle;

如果所包含的对象不为null,则返回true,反之返回false。通常在对对象执行任何其他操作之前,先在Optional上调用此方法。

//ispresent
Optional<String> optional = Optional.of("javaone");
if(optional.isPresent()){
//TODO
}

布尔值[isEmpty()]

如果存在值,则返回flase;否则返回true,这与isPresent相反,并且尽在Java11以及更高版本种可用

//isempty
Optional<Stirng> optional = Optional.of("javaone");
if(optionall.isEmpty()){
//TODO
}

如果存在值,则使用该值调用指定的使用者,否则,社么都不做

如果你不熟悉Java8,那么您可能会想知道,什么是消费者,简单来说,消费者就是一种接收参数且不返回任何内容的方法。当使用ifPresent时,这个方法就是一石二鸟。

我们可用执行值存在性检查并使用一种方法执行预期的操作。

//ifpresent
Optional<Sring> optional = Optional.of("javaone")l
optionall.ifPresent(s->System.out.println(s.length()));

获取可选值

T[get]

如果此Optional中存在值,则返回该值,否则抛出NoSuchElementException.在这之后,我们想要的是存储在Optional中的值,我们可以通过get()来获取它,但是当该值为null时,此方法将引发异常,这就需要orElse()来紧急救援。

//get
Optional<String> optional = Optional.of("Javaone");
if(optional.isPresent()){
String value = optional.get();

orElse()

返回值;反之返回其他

该orElse()方法用于检索包装在Optional实例内的值。它采用一个充当默认值的参数,该orElse()方法返回包装的值以及参数,反之。

//orElse
String nullName = null;
String name = Optional.ofNullable(nullName).ofElse("default_name");

适用场景

Optional的方法是尝试通过构建更具表现力的API的可能性来减少Java系统中空指针异常的情况,这些API解释了有时缺少返回值的可能性。

但是 Optional并不是一种避免所以类型的空指针的机制,列如它仍然必须测试方法和构造

像使用null一样,Optional不能帮助传达缺失值的含义,以类似的方式,null可能意味着很多不同的东西

Optional的预期用途主要是作为返回类型,获取此类型的实例之后,可以提取该值或提供其他行为,Optional类的一个非常有用的用例是将其与流或者返回Optional值以构建流畅的API的其他方法结合。

User user = urers.stream().findFirst().orElse(new User("defalt","1234"));

本文作者:开卷日记

本文链接:https://www.cnblogs.com/yifan0820/p/18248736

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   奕帆卷卷  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起