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

JDK1.8 java.util.Optional为解决空指针(NullPointerException)而生

程序员文章站 2022-03-04 11:10:38
...

Optional是一个容器对象,用来解决令所有程序员头疼的空指针问题

1、empty()

该方法返回一个空的Optional对象

public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }

2、of(T value)

该方法返回一个包含T的Optional对象,该方法明确规定value为non-null,如果value为null,会抛出NullPointerException

public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }

3、ofNullable(T value)

该方法返回一个包含T的Optional对象,和of方法不同的是,ofNullable可以接受一个null值而不会抛出NullPointerException,如果value为null则返回一个空的Optional对象

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

4、get()

该方法返回当前Optional对象中保存的值,如果这个值存在则返回,如果不存在则抛出NoSuchElementException

public T get() {
        if (value == null) {
            throw new NoSuchElementException("No value present");
        }
        return value;
    }

5、isPresent()

该方法判断当前容器中是否有值,如果有返回true否则返回false

public boolean isPresent() {
        return value != null;
    }

6、ifPresent(Consumer<? super T> consumer)

该方法传入一个Consumer(消费者),当当前容器中存在值时做一些事情,如果不存在值则什么都不做,当consumer为null时会抛出NullPointerException

public void ifPresent(Consumer<? super T> consumer) {
        if (value != null)
            consumer.accept(value);
    }

7、filter(Predicate<? super T> preidcate)

该方法接收一个谓语,返回一个Optional对象,如果当前容器中没有值返回当前对象,如果当前容器中有值则语preidcate进行匹配,如果匹配成功返回当前Optional对象,如果匹配失败返回一个空的Optional对象,如果参数preidcate为null则抛出

NullPointerException

public Optional<T> filter(Predicate<? super T> predicate) {
        Objects.requireNonNull(predicate);
        if (!isPresent())
            return this;
        else
            return predicate.test(value) ? this : empty();
    }

8、map(Function<? super T, ? extends U> mapper)

该方法接收一个函数,如果当前容器中有值则用该函数处理该值得到包含新的类型的值的Optional容器(得到的新值可以为空),如果当前容器为空则返回空Optional对象,如果mapper为null会抛出NullPointerException

public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
        Objects.requireNonNull(mapper);
        if (!isPresent())
            return empty();
        else {
            return Optional.ofNullable(mapper.apply(value));
        }
    }

9、flatMap(Function<? super T, Option<U>> mapper)

该方法类似 8-map方法,不同的是,该方法在函数内部已经包装了Optional容器

public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
        Objects.requireNonNull(mapper);
        if (!isPresent())
            return empty();
        else {
            return Objects.requireNonNull(mapper.apply(value));
        }
    }

10、orElse( T other)

如果当前容器中的值不为null,返回这个值,如果为null返回T

public T orElse(T other) {
        return value != null ? value : other;
    }

11、orElseGet(Supplier<? extends T> other)

如果当前容器中的值不为null,返回这个值,如果为null则返回结果供应商other提供的值,如果other为null,抛出NullPointerException

public T orElseGet(Supplier<? extends T> other) {
        return value != null ? value : other.get();
    }
12、orElseThrow(Supplier<? extends X> exceptionSupplier) thorw X

如果当前容器中的值不为null,返回这个值,如果为null则抛出供应商exceptionSupplier提供的异常,如果exceptionSupplier为null,抛出NullPointerException

 public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
        if (value != null) {
            return value;
        } else {
            throw exceptionSupplier.get();
        }
    }



相关标签: java工具类