使用 Optional 类处理 null 值
在这一步中,我们将探索一种更现代的方法,即使用 Java 8 引入的 Optional 类来处理 Java 中潜在的 null 值。Optional 是一个容器对象,它可能包含也可能不包含非 null 值。它提供了一种清晰的方式来表明某个值可能不存在,有助于防止 NullPointerException 错误,并使代码更具可读性。
让我们修改之前的示例,以使用 Optional<Boolean>。
-
在 WebIDE 编辑器中打开 BooleanCheck.java 文件。
-
将文件的全部内容替换为以下新代码:
import java.util.Optional;
public class BooleanCheck {
public static void main(String[] args) {
// Creating an Optional that contains a Boolean value
Optional<Boolean> optionalBooleanPresent = Optional.of(true);
// Creating an Optional that is empty (represents null)
Optional<Boolean> optionalBooleanEmpty = Optional.empty();
// Handling the present Optional
if (optionalBooleanPresent.isPresent()) {
System.out.println("optionalBooleanPresent has a value: " + optionalBooleanPresent.get());
} else {
System.out.println("optionalBooleanPresent is empty");
}
// Handling the empty Optional
if (optionalBooleanEmpty.isPresent()) {
System.out.println("optionalBooleanEmpty has a value: " + optionalBooleanEmpty.get());
} else {
System.out.println("optionalBooleanEmpty is empty");
}
// Using orElse to provide a default value if the Optional is empty
Boolean valueOrDefault = optionalBooleanEmpty.orElse(false);
System.out.println("Value from optionalBooleanEmpty orElse(false): " + valueOrDefault);
// Using ifPresent to perform an action only if a value is present
optionalBooleanPresent.ifPresent(value -> System.out.println("Value is present: " + value));
}
}
在这段更新后的代码中:
- 我们导入了
java.util.Optional 类。
- 我们创建了两个
Optional<Boolean> 对象:一个包含值 (Optional.of(true)),另一个为空 (Optional.empty())。
- 我们使用
isPresent() 来检查 Optional 是否包含值。
- 我们使用
get() 从 Optional 中获取值。注意: 对空的 Optional 调用 get() 会抛出 NoSuchElementException,因此始终先使用 isPresent() 进行检查,或者使用其他 Optional 方法。
- 我们演示了
orElse(false),如果 Optional 包含值,则返回该值,否则返回指定的默认值(在这种情况下为 false)。
- 我们展示了
ifPresent(),它接受一个 lambda 表达式,并且仅当 Optional 中存在值时才执行该表达式。
-
保存文件(Ctrl+S 或 Cmd+S)。
-
打开 WebIDE 底部的终端。使用命令 cd ~/project 确保你位于 ~/project 目录下。
-
输入以下命令并按回车键来编译 Java 程序:
javac BooleanCheck.java
如果编译成功,将生成一个新的 BooleanCheck.class 文件。
-
使用以下命令并按回车键来运行编译后的程序:
java BooleanCheck
你应该会看到以下输出:
optionalBooleanPresent has a value: true
optionalBooleanEmpty is empty
Value from optionalBooleanEmpty orElse(false): false
Value is present: true
这个输出展示了如何使用 Optional 以比仅使用 null 更明确、更安全的方式处理值的存在或缺失。使用 Optional 可以使你的代码更清晰,并降低出现 NullPointerException 的可能性。