Guava库学习:Guava中Objects实用工具类的学习

    链接地址:http://www.xx566.com/detail/128.html

    Java中的Object类是所有Java类的超类(也就是祖先),所有对象都实现Object类中的方法,在日常的工作中,我们经常需要重写其中的几个 方法, 如:equals、toString、hashCode等方法,而在工作中,我们实现这些方法有时候也比较痛苦,如equals方法判断非空、 toString调试信息不完整等等,在Guava中,其提供了Objects类帮助我们简化了这些常用方法的实现,接下来,我们一起来学习一下。

    首先,我们翻看它的源码,其中包含了几个重要的方法,如:equal,hasCode,firstNonNull,toStringHelper等, 我们依次进行介绍。

equal:作用与Object.equals方法相同,用于判断两个对象是否相等,无论对象是否为空,在对象为null时,避免了抛出NullPointerException。

hasCode:作用与Object.hasCode方法相同,用于产生对象的hasCode值,一般在工作中,覆盖equals方法时也要覆盖hasCode方法,判断两个对象完全相同时,对象的equals和hasCode均需要为真。

firstNonNull:传入两个参数,返回两个参数中不为空的那个,如果二者都不为空,返回第一个参数。

toStringHelper:用于返回一个ToStringHelper对象。

ToStringHelper:是Objects的静态内部类,作用是动态的添加输出信息,用于toString方法的调试,其中 add(String name, Object value)方法用于添加一组键值输出;addValue(Object value)用于添加一个未命名的值输出,不过guava建议使用add方法为value指定一个name;omitNullValues用于配置 ToStringHelper,在toString的时候忽略为null的属性。

    接下来,我们来看下面的代码,其中简单的对以上的方法做了应用,代码如下:

1package guava; 2  3import com.google.common.base.Objects; 4import org.junit.Test; 5  6/** 7 * Objects:Object方法工具类 8 * User: Realfighter 9 * Date: 2014/8/20 10 * Time: 9:42 11 */ 12public class ObjectsTest { 13  14    //打印方法 15    private static void print(Object obj) { 16        System.out.println(String.valueOf(obj)); 17    } 18  19    @Test 20    public void testObjects() { 21        //equal方法:用于判断两个对象是否相等,避免空指针 22        Objects.equal(null, 123);//false 23        Objects.equal(123, 123);//true 24        Objects.equal(123, null);//false 25        Objects.equal(null, null);//true 26  27        //hashCode方法:获取对传入的字段做哈希运算后产生的hashCode值 28        //判断两个对象完全相同时,除了equals为真,hashCode也需要相同 29  30        //firstNonNull:传入两个参数,返回两个参数中不为空的那个,如果二者都不为空,返回第一个参数。 31        print(Objects.firstNonNull(null,"you are null"));//this is null 32        print(Objects.firstNonNull("i am not null","you are null"));//i am not null 33        print(Objects.firstNonNull(null,null));//NullPointerException 34  35        //toStringHelper方法:用于轻松愉快的编写toString方法 36        print(Objects.toStringHelper(this) 37                .add("name", "Realfighter") 38                .add("age", null) 39        //注释omitNullValues后输出:ObjectsTest{name=Realfighter, age=null} 40                .omitNullValues() 41                .toString()); //ObjectsTest{name=Realfighter} 42    } 43  44}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例

    原文地址:Guava库学习:学习GuavaEventBus(二)EventBus事件订阅示例(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.xx566.com%2Fdetail%2F215.html)上一篇Guava库学习:学习GuavaEventBus(一