• Guava源码分析——Optional


    Google的Guava库的出现,使Java代码的书写更加流畅,无论是从效率还是代码风格上,Guava都必将成为一种趋势(Java8明显可以看出,大多数的功能开始借鉴Guava),今天开始,PoNa就以自己微薄的水平试着分析一下Guava的源码,借此使自己更上一层楼,还请各位多多扔砖。

    Guava文档中,第一篇就提到的尽量避免使用Null,会给代码带来一些负面影响,并举出map.get(key) == null,带来的混淆。由此。Guava提出了Optional的概念。

    如图所示,Guava的Optional有两种实现,Absent和Present,这就可以理解为,传统代码书写方式中的null和non-null。而Guava中Absent和Present中重写Optional的isPresent()方法,是的Absent和Present有了最本质的区别(false,true)。

    Optional也提供了一些从null或者non-null转换为Optional的方法,例如:Optional.fromNullable(getTFromXXX());从源码中可以看出,转换很简单。

     public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {
            return (nullableReference == null) ? Optional.<T>absent() : new Present<T>(nullableReference);
     }

    如下,也成为了Optional最常用的方法,代替了if(null == instance)的书写方式

    Optional.fromNullable(getTFromDB()).transform(new Function<Object, Object>() {
    @Override
    public Object apply(Object input) {
    addCache(input);
    return input;

    }
    }));

    上面这段代码与下面代码功能相同

      T result = getTFromDB()
    
      if (null != result) {
          addCache(result);
      }      
      return result;

    以上就是自己对Optional的一些理解,还望大家多多指教。

  • 相关阅读:
    java获得两个日期之间的所有月份
    Java设计模式之观察者模式
    SpringMVC项目配置
    Java设计模式之策略模式
    Tomcat源码
    线程池
    java内存模型
    JVM内存结构 JVM的类加载机制
    java虚拟机-垃圾回收算法
    并发容器-ConcurrentHashMap,CopyOnWriteArrayList
  • 原文地址:https://www.cnblogs.com/pona/p/4521087.html
Copyright © 2020-2023  润新知