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(getTFromCache()).or(Optional.fromNullable(getTFromDB()).transform(new Function<Object, Object>() { @Override public Object apply(Object input) { addCache(input); return input; }}));
上面这段代码与下面代码功能相同
T result = getTFromCache(); if (null == result) { resut = getTFromDB(); if(result != null) { addCache(result); } } return result;
以上就是自己对Optional的一些理解,还望大家多多指教。
时间: 2024-10-14 10:48:46