Guava教程(一)

Guava教程(一)

首页角色扮演云之彼端更新时间:2024-04-22

Guava教程(一)

guava说明

guava是Google开源的一个针对java语言的一个工具库,其中包含了null的处理,简化Throwable异常,集合,缓存,函数式编程,并发,I/O,字符串处理,区间,事件总线,原生类型,数学运算,反射等相关的封装处理。

Optional:使用和避免 null

大多数情况下,开发人员使用 null 表明的是某种缺失情形:可能是已经有一个默认值,或没有值,或找不到值。例如Map.get 返回 null 就表示找不到给定键对应的值。Guava用Optional表示可能为 null 的 T 类型引用。一个Optional实例可能包含非 null 的引用(我们称之为引用存在),也可能什么也不包括(称之为引用缺失)。它从不说包含的是null值,而是用存在或缺失来表示。但 Optional 从不会包含null值引用。Optional用于包含非空对象得不可变对象。这个类有各种实用的方法,以方便代码来处理为可用或不可用,而不是检查null值。

举例一:

控制台输出:

Exception in thread "main" java.lang.NullPointerException at com.fire.guavaone.TestOne.sum(TestOne.java:15) at com.fire.guavaone.TestOne.main(TestOne.java:10)

代码是在运行求和的时候抛出空指针异常。

控制台输出:

Exception in thread "main" java.lang.NullPointerException at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:871) at com.google.common.base.Optional.of(Optional.java:105) at com.fire.guavaone.TestOne.main(TestOne.java:9)

代码是在运行调用Optional.of()的时候抛出空指针异常

上述的例子就是Java在用一般的写法的时候和使用guava库的时候对空

指针的处理,guava就是在程序调用的时候对数据进行了判空操作,避免了在做业务处理的时候抛出异常。其实Optional还有一系列的操作方法,

此处只是用了一个Optional.of()方法引入guava这个库。

方法说明
Optional.of(T)创建指定引用的 Optional 实例,若引用为 null 则快速失败
Optional.absent()创建引用缺失的 Optional 实例,其内部包含了空值
Optional.fromNullable(T)创建指定引用的 Optional 实例,若引用为 null 则表示缺失

前面已经说明了Optional.of()方法的使用,下面再来说明另外两个方法的使用。

举例二:

控制台输出:(注意:optional.isPresent()是判断指定引用是否非空的一个方法)

null

举例三:

控制台输出:

not null

方法说明
boolean isPresent()如果 Optional 包含非 null 的引用(引用存在),返回true
T get()返回 Optional 所包含的引用,若引用缺失,则抛出 java.lang.IllegalStateException
T or(T)返回 Optional 所包含的引用,若引用缺失,返回指定的值
T T orNull()返回 Optional 所包含的引用,若引用缺失,返回 null
SetasSet()返回 Optional 所包含引用的单例不可变集,如果引用存在,返回一个只有单一元素的集合,如果引用缺失,返回一个空集合。

上述的就是optional实例查询的方法,使用都比较简单,获取optional实例过后,直接调用相应的方法。

使用Optional除了赋予null语义,增加了可读性,最大的有点在于它是一种

傻瓜式的防护。Optional迫使你积极的思考引用缺失的情况,因为你必须显式地从 Optional 获取引用。直接使用 null 很容易让人忘掉某些情形,尽管 FindBugs 可以帮助查找 null 相关的问题,但是我们还是认为它并不能

准确地定位问题根源。例如:当你需要用一个默认值来替换可能的null,。Optional 也是一个比较好的替代方,Optional.of(first).or(second)。

Preconditions:前置条件

Preconditions提供静态方法来检查方法或构造函数,被调用是否给定适当的参数。它检查的先决条件。其方法失败抛出IllegalArgumentException。

方法说明检查失败时抛出的异常
checkArgument(boolean)检查 boolean 是否为 true,用来检查传递给方法的参数。IllegalArgumentException
checkNotNull(T)检查 value 是否为 null,该方法直接返回 value,因此可以内嵌使用 checkNotNull?NullPointerException
checkState(boolean)用来检查对象的某些状态。IllegalStateException
checkElementIndex(int index, int size)检查 index 作为索引值对某个列表、字符串或数组是否有效。index>=0 && index<size *IndexOutOfBoundsException
checkPositionIndex(int index, int size)检查 index 作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size *IndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size)检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效*IndexOutOfBoundsException

文字写得再多,再优美,还不如来一个例子更能表达用途一点。

举例一:检测一个浮点型数据是否大于0.0

控制台输出:

Illegal Argument passed: Negative value 0.0.

举例二:两个Integer数据求和之前先判断两个实例是否为空,为空则抛出异常

控制台输出:

Exception in thread "main" java.lang.NullPointerException: Illegal Argument passed: Second parameter is Null. at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:889) at com.fire.guavaone.TestOne.sum(TestOne.java:17) at com.fire.guavaone.TestOne.main(TestOne.java:9)

举例三:通过传入一个数组的下标获取,获取该数组该下标处的值,如果传入的数字大于数组的长度则抛出下标越界异常

控制台输出:

Illegal Argument passed: Invalid index. (5) must be less than size (5)

同理其他的方法也是如此调用。

  1. 索引值常用来查找列表,字符串或者数组中的元素,如List.get(int), String.charAt(int);

  2. 位置值和位置范围常用来截取列表、字符串或数组,如 List.subList(int,int), String.substring(int);

  3. checkNotNull 直接返回检查的参数,让你可以在构造函数中保持字段的单行赋值风格:this.field = checkNotNull(field);

  4. 限制取值的范围等等。

要使用Maven添加对Guava的依赖,请使用以下内容:

<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.5-jre</version> <!-- or, for Android: --> <version>23.5-android</version> </dependency>

使用Gradle添加依赖项:

dependencies { compile 'com.google.guava:guava:23.5-jre' // or, for Android: compile 'com.google.guava:guava:23.5-android' }

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved