Optional
Optional
是 Java 8 提供的为了解决 null
安全问题的一个 API。 提供了多种方法来处理可能为 null
的值,从而减少空指针异常的风险。
使用 Optional
,我们可以把下面的代码进行改写。
public static String getName(User user) {
if(user ==null || user.name == null) {
return "Unknown";
}
return user.name;
}
// 🅱️ Bad
public static String getName(User user) {
Optional<User> userOptional = Optional.ofNullable(user);
if(!user.isPresent()) {
return "Unknown";
}
return user.get().getName();
}
// ✅ Good
public static String getName(User user) {
return Optional.ofNullable(user).map(User::getName).orElse("Unknown");
}
构造 Optional 的三种方式
public static<T> Optional<T> empty() {
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
常用 API
ifPresent()
如果存在值,则执行指定的操作。
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(value -> System.out.println(value)); // 输出: Hello
map()
map 方法能够返回另外一个 Optional 对象。
Optional<String> optional = Optional.of("Hello");
Optional<Integer> length = optional.map(String::length);
System.out.println(length.get()); // 输出: 5
orElse()
如果存在指,返回指定的值,反之返回默认值。
Optional<String> optional = Optional.empty();
String result = optional.orElse("Default Value");
System.out.println(result); // 输出: Default Value
orElseGet()
如果存在指,返回指定的值,调用 other 并返回该调用结果。
Optional<String> optional = Optional.empty();
String result = optional.orElseGet(() -> "Generated Value");
System.out.println(result); // 输出: Generated Value
orElseThrow()
如果存在指,返回指定的值,反之抛出指定的异常。
Optional<String> optional = Optional.empty();
try {
optional.orElseThrow(() -> new IllegalArgumentException("Value is absent"));
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage()); // 输出: Value is absent
}
最后更新于
这有帮助吗?