Optional 类(java.util.Optional)
它是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
常用方法:
-
Optional.of(T t) : 创建一个 Optional 实例。
-
Optional.empty() : 创建一个空的 Optional 实例。
-
Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例。
-
isPresent() : 判断是否包含值。
-
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t。
-
orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值。
-
map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()。
-
flatMap(Function mapper):与 map 类似,要求返回值必须是Optional。
下面引用ImportNew的一段内容来告诉我们如何正确使用Optional。比如千万不要写成这样子
:
public static String getName(User u) {
Optional<User> user = Optional.ofNullable(u);
if (!user.isPresent())
return "Unknown";
return user.get().name;
}
这样改写非但不简洁,而且其操作还是和第一段代码一样。无非就是用isPresent方法来替代u==null。这样的改写并不是Optional正确的用法,我们再来改写一次。
public static String getName(User u) {
return Optional.ofNullable(u)
.map(user->user.name)
.orElse("Unknown");
}
这样才是正确使用Optional的姿势。