Java8 Optional的使用及方法介绍

Java8 Optional

** Optional主要是为了去除java.lang.NullPointerException (NPE) 空指针异常**
Optional:
在这里插入图片描述
该类是的构造方式是private(私有构造),大体讲解一下几个常用的方法。
在这里插入图片描述
在这里插入图片描述

  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);
    }

猜你喜欢

转载自blog.csdn.net/weixin_43939924/article/details/110262825