JDK1.8新特性(三)

Optional 类是 Java 1.8 引入的一个容器类,用于解决空指针问题。它提供了多种方法避免空值检测,如 of、empty、ofNullable。通过 isPresent() 判断对象是否存在,ifPresent() 执行消费操作,get()、orElse()、orElseGet() 和 orElseThrow() 提供了获取或处理缺失值的方式。

Optional类

空指针克星!为了解决java中的空指针问题而生!!
Optional 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

  1. 创建Optional类对象的方法:
    Optional.of(T t) : 创建一个 Optional 实例,t必须非空

    public void test() {
    Date date = new Date();
    date = null;
    Optional date1 = Optional.of(date);//出现空指针异常
    }

Optional.empty() : 创建一个空的 Optional 实例

Optional.ofNullable(T t):t可以为null

   public void test() {
        Date date=new Date();
        date=null;
        Optional<Date> date1 = Optional.of(date);//出现空指针异常
        Optional<Date> date2 = Optional.ofNullable(date);//正常运行内部生成一个空的Optional对象
    }
  1. 判断Optional容器中是否包含对象:
    boolean isPresent() : 判断是否包含对象

    public void test() {
    Date date = new Date();
    date = null;
    Optional date1 = Optional.ofNullable(date);
    boolean present = date1.isPresent();
    System.out.println(present);//false
    }

void ifPresent(Consumer<? super T> consumer) :如果有值,就执行Consumer接口的实现代码,并且该值会作为参数传给它。
3. 获取Optional容器的对象:
T get(): 如果调用对象包含值,返回该值,否则抛异常
T orElse(T other) :如果有值则将其返回,否则返回指定的other对象。

   public void test() {
        Date date = new Date();
        date = null;
        Optional<Date> date1 = Optional.ofNullable(date);
        Date date2 = date1.orElse(new Date());
        System.out.println(date2);//输出Mon Jul 22 20:04:59 CST 2019
    }

T orElseGet(Supplier<? extends T> other) :如果有值则将其返回,否则返回由Supplier接口实现提供的对象。

public void test() {
        Date date = new Date();
        date = null;
        Optional<Date> date1 = Optional.ofNullable(date);
        Date date2 = date1.orElseGet(() -> new Date());
        System.out.println(date2);//输出Mon Jul 22 20:06:59 CST 2019
    }

T orElseThrow(Supplier<? extends X> exceptionSupplier) :如果有值则将其返
回,否则抛出由Supplier接口实现提供的异常。

 public void test() {
        Date date = new Date();
        date = null;
        Optional<Date> date1 = Optional.ofNullable(date);
        Date date2 = date1.orElseThrow(() -> new RuntimeException("对象为空!"));
        System.out.println(date2);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值