Java 效率提升系列之 Optional对象

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的姿势。

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/107175949