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
}
相关推荐
qh0526wy4 分钟前
pyqt5冻结+分页表
开发语言·python·qt
井底哇哇10 分钟前
Apline linux 安装scikit-learn 过程记录
python·机器学习·scikit-learn
hjxxlsx11 分钟前
探索 C++ 自定义函数的深度与广度
开发语言·c++
海棠AI实验室32 分钟前
机器学习基础算法 (二)-逻辑回归
人工智能·python·机器学习
罗政35 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第12章 结束
java·开发语言·pdf
匹马夕阳36 分钟前
详细对比JS中XMLHttpRequest和fetch的使用
开发语言·javascript·ecmascript
月巴月巴白勺合鸟月半36 分钟前
一个特别的串口通讯
开发语言·串口通讯
乄北城以北乀42 分钟前
第1章 R语言中的并行处理入门
开发语言·分布式·r语言
全栈老实人_1 小时前
农家乐系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven
Tester_孙大壮1 小时前
Python爬虫技术科普
开发语言·爬虫·python