Optional.ofNullable()方法使用
Posted 刚入门的程序猿小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Optional.ofNullable()方法使用相关的知识,希望对你有一定的参考价值。
Optional.ofNullable()方法
举个栗子
public static void main(String[] args)
List<String> list = null;
list.forEach(x -> System.out.println(x));
工作中经常会遇到,查询返回空,如果没有判空处理,一不小心就会空指针异常。加上if判断处理也可以,但是jdk1.8有更优雅的处理方式。
public static void main(String[] args)
List<String> list = null;
List<String> newList = Optional.ofNullable(list).orElse(Lists.newArrayList());
newList.forEach(x -> System.out.println(x));
先解释代码含义:如果list集合不为空,将list集合赋值给newList;如果list集合为空创建一个空对象集合赋值给newList,保证list集合永远不为空,也就避免了空指针异常。(为了更好的理解,分开写了,比较庸俗,实际工作中都是一行搞定,哈哈哈)
再看看源码:底层是怎么处理的,怎么就避免了空指针呢?
//静态变量 empty
private static final Optional<?> EMPTY = new Optional<>();
//如果对象为空,执行empty()方法;不为空,执行of(value)方法
public static <T> Optional<T> ofNullable(T value)
return value == null ? empty() : of(value);
public static<T> Optional<T> empty()
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
public static <T> Optional<T> of(T value)
return new Optional<>(value);
1.首先执行ofNullable()方法,如果T对象为空,执行empty()方法;不为空,执行of(value)方法;
2.empty()方法,初始化一个空对象Optional(空对象和null不是一回事哈);
3.of(value)方法,将泛型对象T用于Optional构造方法的参数上,返回一个有值的对象
4.经过上面两步,从而保证了Optional不为null,避免了空指针;
以上是关于Optional.ofNullable()方法使用的主要内容,如果未能解决你的问题,请参考以下文章
如果我们将Optional.of方法设为私有,并且只允许Java中的Optional.ofNullable,该怎么办?除了向后兼容性会有什么问题吗?
Optional.ofNullable(i).ifPresent... 与 if (i != null) [重复]