Guava教程(二)

Guava教程(二)

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

Guava教程(二)

guava说明

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

Objects:

Java7引入了Objects类,并提供了一系列的方法,或许在平时的开发过程中很少人用到,该类提供的方法适用于所有对象,如equal,hash等辅助方法。

方法说明返回值类型
toString(T o)将一个对象转化成String并返回String
toString(T o,String nullDefault)将一个对象转化成String并返回,如果对象为null的话默认返回第二个参数的值String
equals(T o1,T o2)判断两个对象是否等价boolean
compare(T a, T b, Comparator<? super T> c)比较两个对象的大小int(分大于,等于,小于等三种类型值)
deepEquals(T o1,T o2)比较两个对象的深度和值是否相等,常用于数组,集合比较boolean
hashcode(T o1)获取对象的hashcode值int
hash(T o1 …)将对象封装成数组过后再获取数组的hashcode值int
nonNull(T o1)判断对象是否为nullboolean
isNull(T o)判断对象是否为null 和 nonNull返回值相反boolean
requireNonNull(T o1)如果对象为null则抛出空指针异常,不为null则返回改对象T
requireNonNull(T o1,String message)同上面的方法一样,第二个参数为自定义异常信息T
requireNonNull(T o1,Suppliermessage)同上面的方法一样,第二个参数为自定义异常信息Supplier为一个泛型接口,里面有一个get方法返回的是通用的信息T

其实上面的方法在开发中经常用到,只是分用的次数多少而已。在以前得开发中,我自己用得也是比较少,甚至都没有听说过个,毕竟是1.7才出来得是吧。但是现在java已经到1.8了,或许现在说不知道得话估计就很难说自己会Java语言了。我自己在开发过程中上述得某些方法是经常用到,因为Java都已经给你封装好了这些方法,自己就没必要再去封装一个属于自己得工具类吧。毕竟*还是得有深度才行啊。下面我们还是写几个小得测试案例来验证一下上述得放法吧。

  1. equals(),compare(),deepEquals()等相关方法测试:

控制台输出:注意输出和上图中得语句是一一对应的。

true false false true -11 true false false false false true

上述输出说明了相同方法之间在入参不同时,得到的结果也是不同的,特别是在equals()和deepEquals()这两个方法之间体现是最明显的。

  1. toString(),hashcode(),hash()等相关方法测试:

控制台输出:注意输出和上图中得语句是一一对应的。

12 12 is null 48690 48721 48721 48752

上面的代码和输出看清楚了么,你们发现问题了没,为啥Objects.hashCode(Arrays.asList("123")))和Objects.hash("123")的输出是一模一样的呢,hashcode值怎么可能一样呢,其实Objects.hash()在源码里面就是转成了一个数组过后在获取hashcode值并返回的。

  1. nonNull(),isNull(),requireNonNull()等相关方法测试:

控制台输出:注意输出和上图中得语句是一一对应的。

true false false true 123 123 123 123 传入 null 有意思吗? 传入 null 有意思吗?

发现了吗?这些方法的调用就是如此的简单,是不是很好用啊。自己在处理相关操作时,想到了这些方法了么?

上述的方法是Java 1.7以后就自带的,所以很多时候在做相关的操作时就没必要自己去创建一个工具类了,直接调用系统的完完全全就能解决问题。上面讲的是Objects类的相关方法,可能有些人会为你这不是在说guava吗,为啥搞个Java的类出来啊。我们肯定是要讲guava的,guava里面也有如此的操作,早在1.7之前guava就对其做了相应的补充,只是在后面在java更新到1.7过后才对相应的方法进行移除,最后将类更名为MoreObjects。这里就要说一说guava的MoreObjects类了,MoreObjects从名字来听就知道结果了,因为Objects类为final类型,所以此处的MoreObjects类为单独的一个类,里面也有几个处理逻辑的方法。下面就介绍一下MoreObjects这个类吧。

MoreObjects:

其实MoreObjects这个类里面只有两个方法,以前重复的都移除得差不多了,其中一个为firstNonNull(@Nullable T first, @Nullable T second)和toStringHelper()的几个重载方法

方法说明返回值类型
firstNonNull(T first, T second)如果第一个对象为null,则返回第二个对象,这个好像和Objects里面某个方法很类似T
toStringHelper(T o)一般用于字符串的拼接ToStringHelper

上面的第二个方法或许不理解,写个测试案例就知道怎么玩了。

控制台输出:注意输出和上图中得语句是一一对应的。

Person{name=孙泉, age=null}

这样看的话就知道了吧,ToStringHelper为MoreObjects类的一个内部类,里面维护的一个链表。通过这样可以重写类的toString()方法,通过这样来实现字符串的拼接。toStringHelper()可以传入对象,类名,字符串(该字符串为类的名字)等参数。

此时ObjectsMoreObjects类就介绍完了,通过这些了解过后或许你新建的类,方法或写的代码就会少了很多。

要使用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