Optional 类主要解决的问题是臭名昭著的空指针异常;
好家伙,那就赶紧用起来吧,在项目中使用到Optional.of 判断Dao查询的数据,发现使用Optional反而报错了,查看源码,竟然用错了。
Optional.of
/**
* 摘自源码注释:可以看到入参为null会抛出异常
* Returns an {@code Optional} with the specified present non-null value.
*
* @param <T> the class of the value
* @param value the value to be present, which must be non-null
* @return an {@code Optional} with the value present
* @throws NullPointerException if value is null
*/
Optional<Object> of = Optional.of(null);
if(of.isPresent()){
System.out.println(of.get());
}
Optional.ofNullable
/**
* 摘自源码注释:可以看到入参为null会新建实例。
* Returns an {@code Optional} describing the specified value, if non-null,
* otherwise returns an empty {@code Optional}.
*
* @param <T> the class of the value
* @param value the possibly-null value to describe
* @return an {@code Optional} with a present value if the specified value
* is non-null, otherwise an empty {@code Optional}
*/
Optional<Object> o = Optional.ofNullable(null);//.orElse("1")
if(o.isPresent()){
System.out.println(o.get());
}
两者最大区别在于对入参为Null时的处理,所以当入参存在为Null的情况下,使用Optional.ofNullable。