Optional的妙用——从此告别使用obj==null来判空

本文深入讲解了Java 8中Optional类的使用方法,包括其构造方式、常用API介绍及实际应用场景,帮助开发者优雅地处理空值问题。
前言

在日常开发中,一不小心就会出现NPE(NullPointerException),因此总少不了去判断一个对象是否为null的场景,常见的做法像这样:

if(obj == null) {
	// TODO
} else {
	// doSomething()
}

这样做没什么问题,但是还不够“优(zhuang)雅(X)”,所以 jdk 1.8 之后为我们新增了一个Optional类,从此就在判null的路上越走越远…

正题:Optional的妙用

1、看外貌:

public final class Optional<T> {...}

final类型的类,不可继承

2、看构造:

// 无参
private Optional() {
    this.value = null;
}
// 有参
private Optional(T value) {
    this.value = Objects.requireNonNull(value);
}

提供两个构造函数,但都是私有的,意味着我们并不能构造Optional的实例。

3、看属性

// 构造一个空的Optional实例
private static final Optional<?> EMPTY = new Optional<>();
// final类型的value,如果当前对象不为null,则value等于当前对象,否则value为null
private final T value;

4、看方法
Optional类不能new实例,因此要使用Optional,只能通过它的静态方法:

// 创建一个value=null的Optional实例
public static<T> Optional<T> empty() {
    @SuppressWarnings("unchecked")
    Optional<T> t = (Optional<T>) EMPTY;
    return t;
}

// 根据传入的对象构造一个有值的Optional实例,如果传入的对象value=null,则会报NPE异常
public static <T> Optional<T> of(T value) {
    return new Optional<>(value);
}

// 根据传入的对象构造一个Optional实例,如果传入的对象为null,则构造一个value=null的Optional实例,
// 否则构造一个value等于传入对象的Optional实例
public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}

5、看使用

// 判断一个对象是否为null,是则返回false,不是返回true
Optional.ofNullable(obj).isPresent();

// 对象不为null,则执行ifPresent()方法,否则什么也不做
Optional.ofNullable(obj).ifPresent(o -> System.out.println("对象不为null会执行这里:" + o))

// 对象不为null返回对象的值,否则返回orElse()里面的值
Optional.ofNullable(obj).orElse(otherValue)

// 对象不为null返回对象的值,否则执行orElseGet()里面的逻辑
Optional.ofNullable(null).orElseGet(() -> doSomething())

// 对象不为null则返回对象的值,否则抛出orElseThrow()里面定义的异常
Optional.ofNullable(s).orElseThrow(() -> new BaseException("400", "参数不能为空"))

以上是Optional类中常用的几种方法,还有一些其他的方法大家可以自行阅读源码学习使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值