📌  相关文章
📜  如何使用 Optional 类避免Java中的 NullPointerException?(1)

📅  最后修改于: 2023-12-03 15:38:05.453000             🧑  作者: Mango

如何使用 Optional 类避免 Java 中的 NullPointerException?

在 Java 中,NullPointException 是最常见的异常之一。因此,Java 8 引入了一个名为 Optional 的类来解决这个问题。

Optional 类是什么?

Optional 是 Java 8 引入的一个容器类。它可以包含一个非空的对象或者仅仅是一个空对象。

为什么使用 Optional 类?

在 Java 中,当我们尝试使用一个空对象的时候,会抛出 NullPointException 异常。这个问题可以通过使用 Optional 类来避免。

Optional 类的常用方法
of

在 Optional 类中,你可以使用 of() 方法来创建一个 Optional 对象。如果你尝试使用 of() 方法创建一个 null 对象,它将抛出一个 NullPointerException。

Optional<String> optional = Optional.of("Hello World");
ofNullable

ofNullable() 方法和 of() 方法的作用相同,这两种方法都可以用来创建一个 Optional 对象。唯一的不同是,ofNullable() 方法可以接受一个 null 对象,因为它可能为空。

Optional<String> optional = Optional.ofNullable(null);
isPresent

isPresent() 方法用于检查该对象是否存在。如果 Optional 对象中的值存在,则返回 true,否则返回 false。

Optional<String> optional = Optional.of("Hello World");
if (optional.isPresent()) {
    System.out.println("Value is present");
} else {
    System.out.println("Value is not present");
}
get

get() 方法用于获取 Optional 对象中存储的值。如果 Optional 对象为空,调用此方法将抛出 NoSuchElementException 异常。

Optional<String> optional = Optional.of("Hello World");
String value = optional.get();
System.out.println(value);
orElse

orElse() 方法返回 Optional 对象中存储的值,如果该值不存在,则返回默认值。

Optional<String> optional = Optional.empty();
String value = optional.orElse("Default Value");
System.out.println(value);
orElseGet

orElseGet() 方法和 orElse() 方法类似,也是返回 Optional 对象中存储的值或者默认值。唯一的不同是,orElseGet() 方法接受一个 Supplier 参数,用于生成默认值。

Optional<String> optional = Optional.empty();
String value = optional.orElseGet(() -> "Default Value");
System.out.println(value);
orElseThrow

orElseThrow() 方法和 orElse() 方法类似,也是返回 Optional 对象中存储的值或者默认值。唯一的不同是,orElseThrow() 方法在值为 null 的情况下抛出指定的异常。

Optional<String> optional = Optional.empty();
String value = optional.orElseThrow(() -> new RuntimeException("Value not present"));
总结

使用 Optional 类,可以避免空指针异常。通过使用 Optional 类的方法,我们可以轻松地检查和处理 null 对象。常见的 Optional 类方法包括 of、ofNullable、isPresent、get、orElse、orElseGet、orElseThrow。

参考

  1. Java 8 Optional 类介绍
  2. Java Optional API