美文网首页
Optional的一个坑

Optional的一个坑

作者: Twinkle_______ | 来源:发表于2016-06-25 14:44 被阅读1295次

最近在项目中使用Optional,有一处用得不合理的地方,
如下代码:

Optional<List<OrderInfoDto>> orderInfoDtosOptional = Optional.ofNullable(
// 查询数据库
orderInfoService.getOrderInfo(startDate, endDate, orderType)
);
// 继续操作
if (orderInfoDtosOptional.isPresent()) {
  List<OrderInfoDto> orderInfoDtos = orderInfoDtosOptional.get();
  // 出现异常 java.util.NoSuchElementException: No value present
}

然后使用orderInfoDtosOptional.isPresent()去判断是否有值,这样就出现了一个问题。这行orderInfoService.getOrderInfo(startDate, endDate, orderType)代码不会返回null,如果在数据库中没有找到数据,返回size=0的一个 ArrayList<OrderInfoDto>对象,不会返回null, Optional主要是判断null的,在使用orderInfoDtosOptional.isPresent()去判断时返回true, 然后对这个空List对象操作时就出现异常了。

可以执行下面这段代码重现一下这个异常:

   List<Double> a = new ArrayList<>();
   Optional<List<Double>> one1 = Optional.of(a);
   System.out.println(one1.isPresent());
   if (one1.isPresent()) { // 没有达到我预想的效果
       double b = one1.get().stream().mapToDouble(x -> x).average().getAsDouble();
   }

所以在对Collection进行操作的时候,使用Optional就要小心了,最好不要使用Optional去盛装一个Collection对象,结合commons库的Collections.isNotEmpty()MapUtils.isNotEmpty()去判断集合对象是否为空,然后再做相应的操作。

参考链接: http://www.importnew.com/6675.html

相关文章

  • Optional的一个坑

    最近在项目中使用Optional,有一处用得不合理的地方,如下代码: 然后使用orderInfoDtosOptio...

  • 用Optional取代null

    创建Optional对象 Optional.empty():声明一个空Optional Optional.of()...

  • Swift 踩坑笔记

    //记录目前碰过的Swift的坑,实时更新。一、可选代理 optional delegate在OC的时候,判断是否...

  • Guava工具集

    使用和避免null 1、创建Optional对象 1)创建一个空的Optional:Optional.empty(...

  • Optional用法

    Optional用法 从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要...

  • Java8学习笔记之应用Optional的几种模式

    1、创建Optional对象 1)声明一个空的Optional 可以通过静态工厂方法Optional.empty,...

  • JDK8新特性之Optional

    Optional是什么 java.util.Optional Jdk8提供Optional,一个可以包含null值...

  • java Optional

    常见用法 null对象处理 一些坑 orElse方法不管Optional对象本身是不是empty,orElse里的...

  • Optional源码分析(未完)

    Optional源码分析(未完) Optional 类是Java8的新特性,Optional是一个可以为null的...

  • Optional类

    Optional类为Java8新引入的一个类,Optional是一个可以为null的容器对象,Optional中的...

网友评论

      本文标题:Optional的一个坑

      本文链接:https://www.haomeiwen.com/subject/naladttx.html