Java util中的实用工具类(1:Optional与Objects)

本文详细介绍了Java 8中引入的Optional类,包括构造方法、类方法、常用用法及示例,强调了Optional在避免空指针异常上的作用。同时,文章还探讨了Objects类的主要方法,如equals、checkIndex等,以及它们在处理对象和数组时的空指针安全特性。
摘要由CSDN通过智能技术生成

1. Optional 类(since 1.8)

https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
https://blog.csdn.net/wisgood/article/details/52503052

Optional:可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

Optional 被定义为一个简单的容器,其值可能是null或者不是null。在Java 8之前一般某个函数应该返回非空对象但是偶尔却可能返回了null,而在Java 8 以后,不推荐你返回null而是返回Optional。

注意:使用任何像 Optional 的类型作为字段或方法参数都是不可取的. Optional 只设计为类库方法的, 可明确表示可能无值情况下的返回类型. Optional 类型不可被序列化, 用作字段类型会出问题的

注意:该类是final类型的

public final class Optional<T>
extends Object

1.1 构造

Optional 的三种构造方式: Optional.of(obj), Optional.ofNullable(obj) 、 Optional.empty()

  1. Optional.of(obj): 它要求传入的 obj 不能是 null 值的, 否则还没开始进入角色就倒在了 NullPointerException 异常上了.
  2. Optional.ofNullable(obj): 它以一种智能的, 宽容的方式来构造一个 Optional 实例. 来者不拒, 传 null 进到就得到 Optional.empty(), 非 null 就调用 Optional.of(obj).
  3. Optional.empty():返回空的Optional 实例

那是不是我们只要用 Optional.ofNullable(obj) 一劳永逸, 以不变应二变的方式来构造 Optional 实例就行了呢? 那也未必, 否则 Optional.of(obj) 何必如此暴露呢, 私有则可?

  1. 当我们非常非常的明确将要传给 Optional.of(obj) 的 obj 参数不可能为 null 时,比如它是一个刚 new 出来的对象(Optional.of(new User(…))), 或者是一个非 null 常量时;
  2. 当想为 obj 断言不为 null 时, 即我们想在万一 obj 为 null 立即报告 NullPointException 异常, 立即修改, 而不是隐藏空指针异常时, 我们就应该果断的用 Optional.of(obj) 来构造 Optional 实例, 而不让任何不可预计的 null 值有可乘之机隐身于 Optional 中.2. 当想为 obj 断言不为 null 时, 即我们想在万一 obj 为 null 立即报告 NullPointException 异常, 立即修改, 而不是隐藏空指针异常时, 我们就应该果断的用 Optional.of(obj) 来构造 Optional 实例, 而不让任何不可预计的 null 值有可乘之机隐身于 Optional 中.

1.2 类方法列表

序号 方法 描述
1 boolean isPresent() 如果值存在则方法会返回true,否则返回 false。
2 static Optional of(T value) 返回一个指定非null值的Optional。
3 static Optional ofNullable(T value) 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
4 T orElse(T other) 如果存在该值,返回值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值