Java8-Optional 类

说明:

       Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。

       本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。

       Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。

       重要的一点是 Optional 不是 Serializable。因此,它不应该用作类的字段。

空指针异常

       在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException

String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();

       如果要确保不触发空指针异常,就得在访问每一个值之前对其进行明确地检查:

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类的三种创建方法:

1、public static<T> Optional<T> empty():返回一个空的Optional实例。

      问题1:返回的对象使用get()方法时会报java.util.NoSuchElementException异常,因为是一个空对象。

2、public static <T> Optional<T> of(T value):返回非空的Optional,通过参数value传入值。

      问题1:当对象为null时会抛出空指针异常,所以当对象不为null时可使用of()创建方法。

3、public static <T> Optional<T> ofNullable(T value):如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法。其本质是value为null时调用empty()方法,当value不为null时则调用of(null)方法。

PS:当使用==对Optional的对象进行比较时,是进行值的比较,当值相同时则相等(当值时对象时,则是比较对象的地址)。

 

常用方法:

1、public T get():从 Optional 实例中取回实际值对象的方法之一。

2、public boolean isPresent():判断Optional对象的value是不是null,如果不为null,则可执行get()方法。

3、public void ifPresent(Consumer<? super T> consumer):如果存在值,则使用该值调用指定的使用者,否则,什么都不做。例如:

optional1.ifPresent(s -> System.out.println(s.length()));

4、public T orElse(T other) :如果存在就返回值,如果不存在则返回其他(other)。

5、public T orElseGet(Supplier<? extends T> other):返回值(如果存在);否则,调用other并返回该调用的结果。如:

 String name = Optional.ofNullable(nullName).orElseGet(() -> "john");

 

参考:https://www.jianshu.com/p/362010f310b9

参考:https://www.cnblogs.com/zhangboyu/p/7580262.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值