Java8 - Optional 处理可能为空值的容器类

1. 创建一个 Optional 对象

Optional.of、Optional.ofNullable 、Optional.empty是Optional类的三个静态方法,用于创建Optional对象。

1. Optional.of 方法

Optional.of 方法用于创建一个包含非空值的Optional对象,如果传入的值为null,则会抛出NullPointerException异常。

java 复制代码
@Test
public void test0() {
    Optional<String> optional = Optional.of("zhangsan");
    Optional<String> optional1 = Optional.of(null); // java.lang.NullPointerException
}
2. Optional.empty 方法

Optional.empty 方法用于创建一个空的Optional对象,该方法不接受任何参数,直接返回一个空的Optional对象。

java 复制代码
@Test
public void test0() {
    Optional<String> optional = Optional.empty();
}
3. Optional.ofNullable 方法

Optional.ofNullable 方法用于创建一个可能为空的Optional对象,如果传入的值为null,则会创建一个空的Optional对象。

java 复制代码
@Test
public void test0() {
    Optional<String> optional = Optional.ofNullable(null);
}

使用Optional.of方法时,需要确保传入的值不为null,否则会抛出异常。而使用Optional.ofNullable方法时,可以接受null值,并创建一个空的Optional对象。Optional.empty方法直接返回一个空的Optional对象,不包含任何值。

如果确定值不会为null,可以使用Optional.of方法;如果值可能为null,则可以使用Optional.ofNullable方法来避免空指针异常;如果需要创建一个空的Optional对象,可以使用Optional.empty方法。

2. optional.isPresen 方法

Optional.isPresent方法是Optional类的一个实例方法,用于判断Optional对象是否包含非空值,如果Optional对象包含非空值,则isPresent方法返回true;如果Optional对象为空,则返回false。

java 复制代码
@Test
public void test0() {
    Optional<String> optional = Optional.of("zhangsan");
    boolean present = optional.isPresent(); // true

    Optional<String> optional1 = Optional.ofNullable(null);
    boolean present1 = optional1.isPresent();

    System.out.println(present); // true
    System.out.println(present1); // false
}

通常,在使用Optional对象之前,可以先使用isPresent方法进行判断,以避免在获取值之前出现空指针异常。

3. optional.get 方法

Optional.get方法是Optional类的一个实例方法,用于获取Optional对象中的非空值。如果Optional对象包含非空值,则get方法返回该值;如果Optional对象为空,则会抛出NoSuchElementException异常。

java 复制代码
@Test
public void test0() {
    Optional<String> optional = Optional.of("zhangsan");
    if(optional.isPresent()){
        optional.get(); // "zhangsan"
    }

    Optional<Object> optional1 = Optional.ofNullable(null);
    optional1.get(); // java.util.NoSuchElementException: No value present
}

需要注意的是,在调用get方法之前,最好先使用isPresent方法进行判断,以确保Optional对象中存在非空值。否则,如果Optional对象为空,调用get方法将会抛出异常。

4. Optional对象为空时返回一个默认值

如果你希望在Optional对象为空时返回一个默认值,可以考虑使用orElse、orElseGet或orElseThrow方法,而不是直接使用get方法。

1. optional.orElse 方法

获取Optional对象中的非空值,如果Optional为空,则返回默认值

java 复制代码
@Test
public void test0() {
    Optional<String> optional1 = Optional.of("zhangsan");
    if(optional1.isPresent()){
        String value1 = optional1.get();
        System.out.println(value1); // "zhangsan"
    }

    Optional<Object> optional2 = Optional.empty();
    Object value2 = optional2.orElse("default");
    System.out.println(value2); // "default"

    Optional<Object> optional3 = Optional.ofNullable(null);
    Object value3 = optional3.orElse("default");
    System.out.println(value3); // "default"
}
2. optional.orElseThrow 方法

获取Optional对象中的非空值,如果Optional为空,则抛出指定的异常

java 复制代码
@Test
public void test0() {
    Optional<Object> optional = Optional.ofNullable(null);
    optional.orElseThrow(() -> new RuntimeException("Value not present")); // java.lang.RuntimeException: Value not present
}
相关推荐
喜欢喝果茶.1 分钟前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓2 分钟前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)2 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
小镇敲码人11 分钟前
深入剖析华为CANN框架下的Ops-CV仓库:从入门到实战指南
c++·python·华为·cann
island131424 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了28 分钟前
Java中的集合
java·开发语言
摘星编程31 分钟前
深入理解CANN ops-nn BatchNormalization算子:训练加速的关键技术
python
魔芋红茶32 分钟前
Python 项目版本控制
开发语言·python
lili-felicity39 分钟前
CANN批处理优化技巧:从动态批处理到流水线并行
人工智能·python
一个有梦有戏的人41 分钟前
Python3基础:进阶基础,筑牢编程底层能力
后端·python