Optional
类是 Java 8 中引入的一个用于解决空指针异常问题的工具类。它可以包含或不包含非空值,并提供了一系列方法来处理可能为空的值。以下是一个详细的介绍和示例代码
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
// 创建一个包含非空值的Optional
Optional<String> optionalWithValue = Optional.of("Hello, world!");
System.out.println("Optional with value: " + optionalWithValue); // Optional with value: Optional[Hello, world!]
// 创建一个空的Optional
Optional<String> optionalEmpty = Optional.empty();
System.out.println("Empty Optional: " + optionalEmpty); // Empty Optional: Optional.empty
// 使用ofNullable方法创建一个Optional,允许值为null
String nullableValue = null;
Optional<String> optionalNullable = Optional.ofNullable(nullableValue);
System.out.println("Nullable Optional: " + optionalNullable); // Nullable Optional: Optional.empty
// 检查Optional是否包含值
if (optionalWithValue.isPresent()) {
System.out.println("Optional with value is present."); // Optional with value is present.
} else {
System.out.println("Optional with value is empty.");
}
// 获取Optional中的值,如果存在
if (optionalWithValue.isPresent()) {
String value = optionalWithValue.get();
System.out.println("Value in optional: " + value); // Value in optional: Hello, world!
}
// 如果值存在则执行某个操作
optionalWithValue.ifPresent(val -> System.out.println("Value in optional: " + val)); // Value in optional: Hello, world!
// 使用orElse方法获取值,如果Optional为空则返回默认值
String valueOrDefault = optionalEmpty.orElse("Default Value");
System.out.println("Value or default: " + valueOrDefault); // Value or default: Default Value
// 使用orElseGet方法获取值,如果Optional为空则通过Supplier生成值
String valueOrGenerated = optionalEmpty.orElseGet(() -> generateValue());
System.out.println("Value or generated: " + valueOrGenerated); // Value or generated: Generated Value
// 使用orElseThrow方法获取值,如果Optional为空则抛出异常
try {
String valueOrThrow = optionalEmpty.orElseThrow(() -> new IllegalArgumentException("Value is empty"));
} catch (IllegalArgumentException e) {
System.out.println("Exception thrown: " + e.getMessage()); // Exception thrown: Value is empty
}
}
// 用于生成默认值的方法
private static String generateValue() {
return "Generated Value";
}
}
在这个示例中,我们展示了如何创建包含非空值和空值的 Optional
,以及如何检查 Optional
是否包含值,获取 Optional
中的值,执行操作,以及获取默认值或者抛出异常等操作。通过使用 Optional
,我们可以更加安全和简洁地处理可能为空的值,避免了空指针异常的发生。