【Java】jdk1.8新特性-Optional

本文介绍了JDK1.8的新特性Optional,它能让代码对NULL对象的处理更优雅高效。文中详细阐述了创建Optional对象的方法,如of()和ofNullable();判断是否包含对象的方法,如isPresent()等;以及获取Optional容器对象的方法,如get()、orElse()等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK1.8新特性-Optional

1.Optional

1.1 概念

Optional和Stream流一样,是JAVA8的新成员;它可以使代码中对NULL对象的处理更加优雅且高效;

1.2 方法介绍
1.2.1 创建Optional对象

of():静态方法,传入一个对象,若该对象是null,会抛出空指针异常;

    public static <T> Optional<T> of(T value) {
        return new Optional(value);
    }
    private Optional(T value) {
        this.value = Objects.requireNonNull(value);
    }

ofNullable:静态方法,传入一个对象,若该对象是null,会返回一个空的Optional对象;

	private static final Optional<?> EMPTY = new Optional();
	
    public static <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }
    
     public static <T> Optional<T> empty() {
        Optional<T> t = EMPTY;
        return t;
    }
1.2.2 判断Optional对象是否包含对象

isPresent():成员方法,若Optional对象中包含对象则返回true,反之返回false;

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

ifPresent(Consumer<? super T> action):成员方法,若包含对象则执行action的方法

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

    }

ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction):成员方法,包含对象则执行action,反之启动emptyAction线程

    public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) {
        if (this.value != null) {
            action.accept(this.value);
        } else {
            emptyAction.run();
        }

    }

isEmpty():成员方法,正好与isPresetn()相反,包含对象返回false,反之返回true;

    public boolean isEmpty() {
        return this.value == null;
    }
1.2.3 获取Optional容器得到对象

get(): 如果调用对象包含值,返回该值,反之抛出异常

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

orElse(T other):若有值则返回,反之返回other

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

orElseGet(Supplier<? extends T> supplier):若有值则返回,反之返回supplier提供的对象

    public T orElseGet(Supplier<? extends T> supplier) {
        return this.value != null ? this.value : supplier.get();
    }

orElseThrow(Supplier<? extends X> exceptionSupplier):若有值则返回,反之抛出由supplier提供的异常

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

orElseThrow():若有值则返回,反之抛出Optional提供的异常

    public T orElseThrow() {
        if (this.value == null) {
            throw new NoSuchElementException("No value present");
        } else {
            return this.value;
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值