Guava作为一个牛逼的通用工具类.提供了很多灰常不错的封装方法.可以让代码变得非常优美.一般来说,就是谁用谁知道了..
按照wiki上的顺序,第一个是Optional,主要的功能是解决null值表达寓意的问题.还可以避免null值经常造成的NullPointerException..个人的感觉是,使用增加了一点代码量,提高了一些代码的自有缺陷.
Optional 是一个抽象类,对应的实现有两个,
其中,Absent对应就是空值时候的Optional,而Present是有非空值的Optional..
具体的方法如下
/** * 获取一个空值(null值)的Optional对象 * 对应会返回Absent对象 */ public static <T> Optional<T> absent(); /** * 获取一个非null的Optional对象 * 对应会返回Present对象 */ public static <T> Optional<T> of(T reference); /** * 静态方法,调用方无需关心nullableReference是Null还是非Null. * 如果是null则转换成Absent对象,如果非null则转换为Present对象 */ public static <T> Optional<T> fromNullable(T nullableReference); /** * 判断该Option是否有值 */ public abstract boolean isPresent(); /** * 有值的时候返回对应的值,如果为空值对象(Absent对象),则抛出IllegalStateException异常 */ public abstract T get(); /** * 做一个值判断,规则是, * 如果是有值对象(Present对象),则不管defalutValue是什么,自动返回对应的值. * 如果是空值对象(Absent对象),则返回defaultValue对应的值,defaultValue如果是null,也返回null */ public abstract T or(T defaultValue); /** * Returns this {@code Optional} if it has a value present; {@code secondChoice} * 该方法从来不用.不多解释(保留英文注释) * otherwise. */ public abstract Optional<T> or(Optional<? extends T> secondChoice); /** * Returns the contained instance if it is present; {@code supplier.get()} otherwise. If the * supplier returns {@code null}, a {@link NullPointerException} is thrown. * 该方法从来不用.不多解释(保留英文注释) * * @throws NullPointerException if the supplier returns {@code null} */ @Beta public abstract T or(Supplier<? extends T> supplier); /** * 这个就是 or方法传入一个Null的效果. * 如果是有值对象(Present对象),则返回对应的值. * 如果是空值对象(Absent对象),则返回null */ public abstract T orNull(); /** * 该方法一直没搞清楚是干嘛用的..就是把Optional自动转换成一个Set. * 如果是有值对象(Present对象),则返回只有一个值的Set. * 如果是空值对象(Absent对象),则返回一个空的Set. * 这个方法有应用场景吗?? */ public abstract Set<T> asSet(); /** * 安全的equals比较.不需要担心空指针问题哦 * 如果是有值对象(Present对象),则调用对应值的equals方法. * 如果是空值对象(Absent对象),则 */ @Override public abstract boolean equals(Object object); /** * Returns the value of each present instance from the supplied {@code optionals}, in order, * skipping over occurrences of {@link Optional#absent}. Iterators are unmodifiable and are * evaluated lazily. * 自动过滤空值对象,转换成新的Iterable */ public static <T> Iterable<T> presentInstances(final Iterable<? extends Optional<? extends T>> optionals);
大概会用到的方法如下
//present Optional<Integer> possible = Optional.<Integer>of(5); System.out.println(possible.isPresent());//true System.out.println(possible.get()); // 5 System.out.println(possible.or(-1));//5 System.out.println(possible.orNull());//5 //absent Optional<Integer> absentValue = Optional.<Integer>absent(); System.out.println(absentValue.isPresent());//false try{ System.out.println(absentValue.get());//IllegalStateException } catch (Exception e){ e.printStackTrace(); } System.out.println(absentValue.or(-1)); // -1 System.out.println(absentValue.orNull()); // null // // //用static方法,自动帮我们创建Optional对象. Optional<Integer> nullValue = Optional.<Integer>fromNullable(null); System.out.println(nullValue.isPresent());//false try{ System.out.println(nullValue.get());//IllegalStateException } catch (Exception e){ e.printStackTrace(); } System.out.println(nullValue.or(-1)); // -1 System.out.println(nullValue.orNull()); // null
写道
相信用过scala的Option的同学都知道,这个设计有多么的优美。
相关推荐
赠送jar包:guava-30.0-jre.jar; 赠送原API文档:guava-30.0-jre-javadoc.jar; 赠送源代码:guava-30.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-30.0-jre.pom; 包含翻译后的API文档:guava-30.0-jre-...
赠送jar包:guava-27.0.1-jre.jar; 赠送原API文档:guava-27.0.1-jre-javadoc.jar; 赠送源代码:guava-27.0.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-27.0.1-jre.pom; 包含翻译后的API文档:guava-...
赠送jar包:guava-25.0-jre.jar; 赠送原API文档:guava-25.0-jre-javadoc.jar; 赠送源代码:guava-25.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-25.0-jre.pom; 包含翻译后的API文档:guava-25.0-jre-...
赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...
guava-27.0-jre.jar
guava-27.1-jre
赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar; 赠送Maven依赖信息文件:guava-11.0.2.pom; 包含翻译后的API文档:guava-11.0.2-javadoc-API...
赠送jar包:guava-29.0-jre.jar; 赠送原API文档:guava-29.0-jre-javadoc.jar; 赠送源代码:guava-29.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-29.0-jre.pom; 包含翻译后的API文档:guava-29.0-jre-...
最新版 guava-30.1-jre.jar
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
guava-28.2-android.jar
赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...
赠送jar包:guava-29.0-jre.jar; 赠送原API文档:guava-29.0-jre-javadoc.jar; 赠送源代码:guava-29.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-29.0-jre.pom; 包含翻译后的API文档:guava-29.0-jre-...
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
赠送jar包:guava-26.0-android.jar; 赠送原API文档:guava-26.0-android-javadoc.jar; 赠送源代码:guava-26.0-android-sources.jar; 赠送Maven依赖信息文件:guava-26.0-android.pom; 包含翻译后的API文档:...
赠送jar包:guava-24.1-jre.jar; 赠送原API文档:guava-24.1-jre-javadoc.jar; 赠送源代码:guava-24.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-24.1-jre.pom; 包含翻译后的API文档:guava-24.1-jre-...
赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...
guava
赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...
赠送jar包:guava-28.0-android.jar; 赠送原API文档:guava-28.0-android-javadoc.jar; 赠送源代码:guava-28.0-android-sources.jar; 赠送Maven依赖信息文件:guava-28.0-android.pom; 包含翻译后的API文档:...