【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(Optional篇)

您所在的位置:网站首页 java开发教程 【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(Optional篇)

【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(Optional篇)

2023-06-13 12:53| 来源: 网络整理| 查看: 265

Guava相关的介绍

在这里插入图片描述

Guava工程包含了许多被Google的Java项目广泛依赖的核心库。我们希望通过本文档为Guava中最流行和最强大的功能提供更具可读性和解释性的说明。

本教程是中级教程,适合 Guava 中级开发者的进阶学习。

学习Guava前的准备工作

学习目标和计划:在学习Guava技术之前,您需要明确自己的学习目标和计划。例如,您希望学习Guava的哪些功能,需要掌握哪些知识点,以及在什么时间内完成学习任务等。

学习工具:为了更好地学习Guava技术,您需要选择适合自己的学习工具。例如,您可以使用Eclipse、IntelliJ IDEA等集成开发环境(IDE)来编写和调试Java代码,使用Maven或Gradle等构建工具来管理项目依赖。

参考资料:在学习Guava技术之前,您需要收集相关的学习资料。例如,您可以阅读Guava官方文档、参考书籍、博客文章、视频教程等。

使用Guava工具的实战意义

很多 Guava 工具类对 Null 值都采用快速失败操作,除非工具类本身提供了针对 Null 值的因变措施。此外,Guava 还提供了很多工具类,让你更方便地用特定值替换 Null 值。

使用Optional除了赋予null 语义,增加了可读性,最大的优点在于它是一种傻瓜式的防护。Optional 迫使你积极思考引用缺失的情况,因为你必须显式地从 Optional 获取引用。直接使用 null 很容易让人忘掉某些情形,尽管 FindBugs 可以帮助查找 null 相关的问题,但是我们还是认为它并不能准确地定位问题根源。

使用Optional 的意义在哪儿?

使用Optional的最大优点是除了赋予null语义,还增加了代码的可读性。此外,它还是一种傻瓜式的防护,因为Optional迫使你积极思考引用缺失的情况,你必须显式地从Optional获取引用。相比之下,直接使用null很容易让人忘掉某些情形,尽管FindBugs等工具可以帮助查找null相关的问题,但它们并不能准确地定位问题根源。

在方法的返回值中,也可能存在null的情况。就像你自己实现的方法method(a,b)可能会返回null一样,其他人编写的方法也可能会返回null。为了避免这种情况,我们可以将方法的返回类型指定为Optional,这样就可以迫使调用者思考返回的引用缺失的情形。这样一来,你就不会忘记别人写的方法method(a,b)会返回null,就像你自己实现method(a,b)时可能会忘记输入参数a可以为null一样。

具体案例

建议您在使用Set时避免使用null,或者将null作为Map的键值。使用特殊值来代表null可以让查找操作的语义更加清晰。如果您想在Map中使用null作为某个键的值,建议您不要将这个条目放到Map中,而是单独维护一个"值为null的键集合"(null keys)。在Map中,对应某个键的值是null和没有对应某个键的值是非常容易混淆的两种情况。因此,最好将值为null的键分离开,并且仔细思考null值的键在您的项目中到底表达了什么语义。

如果您需要在列表中使用null,并且这个列表的数据是稀疏的,建议您使用Map,这可能会更高效,并且更准确地符合您的潜在需求。

此外,建议您考虑使用自然的null对象——特殊值。例如,为某个枚举类型增加特殊的枚举值表示null,比如java.math.RoundingMode中定义的枚举值UNNECESSARY,它表示一种不做任何舍入操作的模式,使用这种模式进行舍入操作会直接抛出异常。

使用更优秀的集合功能

如果您真的需要使用null值,但是null值不能与Guava中的集合实现一起工作,那么建议您选择其他实现。例如,您可以使用JDK中的Collections.unmodifiableList来替代Guava的ImmutableList。

Optional的使用介绍

大多数情况下,开发人员使用 null 表明的是某种缺失情形:可能是已经有一个默认值,或没有值,或找不到值。例如,Map.get 返回 null 就表示找不到给定键对应的值。

Optional的引用类型

Guava用Optional表示可能为 null 的 T 类型引用。

一个Optional 实例可能包含非 null 的引用(我们称之为引用存在),也可能什么也不包括(称之为引用缺失)。它从不说包含的是 null 值,而是用存在或缺失来表示。但Optional 从不会包含 null 值引用。

Optional possible = Optional.of(5); possible.isPresent(); // returns true possible.get(); // returns 5

Optional无意直接模拟其他编程环境中的”可选” or “可能”语义,但它们的确有相似之处。Optional 最常用的一些操作被罗列如下:

创建 Optional 实例(静态方法) Optional.of(T) :创建指定引用的 Optional 实例,若引用为 null 则快速失败。Optional.absent():创建引用缺失的 Optional 实例。Optional.fromNullable(T):创建指定引用的 Optional 实例,若引用为 null 则表示缺失。 Optional实例查询引用(非静态方法) boolean isPresent():如果 Optional 包含非 null 的引用(引用存在),返回trueT get():返回Optional包含的引用,若引用缺失,则抛出 java.lang.IllegalStateExceptionT or(T):返回Optional包含的引用,若引用缺失,返回指定的值。T orNull():返回Optional所包含的引用,若引用缺失,返回 nullSet asSet():返回Optional所包含引用的单例不可变集,如果引用存在,返回一个只有单一元素的集合,如果引用缺失,返回一个空集合。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3