欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java8 Optional的使用及方法介绍

程序员文章站 2022-07-10 17:58:34
Java8 Optional** Optional主要是为了去除java.lang.NullPointerException (NPE) 空指针异常**Optional:该类是的构造方式是private(私有构造),大体讲解一下几个常用的方法。of方法是一个静态方法,用于创作Optional对象,他的参数必须是一个明确非null的值。 // of: 方法是明确参数不是null Optional optional = Option...

Java8 Optional

** Optional主要是为了去除java.lang.NullPointerException (NPE) 空指针异常**
Optional:
Java8 Optional的使用及方法介绍
该类是的构造方式是private(私有构造),大体讲解一下几个常用的方法。
Java8 Optional的使用及方法介绍
Java8 Optional的使用及方法介绍

  1. of方法
    是一个静态方法,用于创作Optional对象,他的参数必须是一个明确非null的值。
        // of: 方法是明确参数不是null
        Optional<String> optional = Optional.of("hello");
        // 判空 不建议  ifPresent方法(无参): 返回的是一个boolean 值  不是null返回 true
        if (optional.isPresent()) {
            System.out.println(optional.get());
        }
        // 建议 结果: hello    ifPresent方法(有参): 他的参数是一个Consumer函数式接口
        //  不是null返回 执行Consumer#accept
        optional.ifPresent(System.out::println);

of方法源码:

   public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }
  1. isPresent
    判读Optional对象是否为空。有一个重载方法。
    isPresent(无参)源码:
    返回的是一个boolean 值 不是null返回 true,反之返回false。
    注: 不知道value是啥的请自行看看上面的构造方法截图。
    public boolean isPresent() {
        return value != null;
    }

isPresent(有参)源码:
他的参数是一个Consumer函数式接口,不是null返回 执行Consumer#accept。

    public void ifPresent(Consumer<? super T> consumer) {
        if (value != null)
            consumer.accept(value);
    }
  1. empty
    他与of方法相似是一个静态方法,也用于创作Optional对象,但是他没有参数,创建的是一个空的Optional对象。
   ptional<String> optional1 = Optional.empty();
    if (optional.isPresent()) {
    	// 输出结果为空(什么都没有)
       System.out.println(optional.get());
    }
    // 建议
    optional1.ifPresent(System.out::println);

empty源码:

    public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }
  1. get
    用于获取Optional对象中的的value。但是获取的时候最好还是isPresent判断一下
    get源码:
    public T get() {
        if (value == null) {
            throw new NoSuchElementException("No value present");
        }
        return value;
    }
  1. orElse
    用于获取Optional对象中的的value。如果value为空则将orElse方法的参数(T 结果泛型)当做value。
 Optional<String> optional1 = Optional.empty();
 // 结果就是value
 System.out.println(optional1.orElse("world"));

orElse源码:

public T orElse(T other) {
        return value != null ? value : other;
}
  1. orElseGet
    用于获取Optional对象中的的value。如果value为空则将orElseGet方法的参数是一个Supplier接口他的结果,当做value。
String supplier = optional1.orElseGet(() -> "Supplier");

orElseGet源码:

    public T orElseGet(Supplier<? extends T> other) {
        return value != null ? value : other.get();
    }
  1. orElseThrow
    用于获取Optional对象中的的value。如果value为空则抛出异常。
		String supplier1 = optional1.orElseThrow(() -> {
            return new Exception();
        });
        System.out.println("supplier1 = " + supplier1);

orElseThrow源码:

    public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
        if (value != null) {
            return value;
        } else {
            throw exceptionSupplier.get();
        }
    }
  1. ofNullable
    他与of方法和ofNullable方法相似是一个静态方法,也用于创作Optional对象,但是他参数,可以是null也是以不是null。
   Optional<String> optional = Optional.ofNullable("hello");

ofNullable源码:

      public static <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }

本文地址:https://blog.csdn.net/weixin_43939924/article/details/110262825

相关标签: Java8 java