转载:https://my.oschina.net/realfighter/blog/349821

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的属性。

import com.google.common.base.Objects;
import org.junit.Test;

public class ObjectsTest {

//打印方法
private static void print(Object obj) {
System.out.println(String.valueOf(obj));
}

@Test
public void testObjects() {
//equal方法:用于判断两个对象是否相等,避免空指针
Objects.equal(null, 123);//false
Objects.equal(123, 123);//true
Objects.equal(123, null);//false
Objects.equal(null, null);//true

//hashCode方法:获取对传入的字段做哈希运算后产生的hashCode值
//判断两个对象完全相同时,除了equals为真,hashCode也需要相同

//firstNonNull:传入两个参数,返回两个参数中不为空的那个,如果二者都不为空,返回第一个参数。
print(Objects.firstNonNull(null,"you are null"));//this is null
print(Objects.firstNonNull("i am not null","you are null"));//i am not null
print(Objects.firstNonNull(null,null));//NullPointerException

//toStringHelper方法:用于轻松愉快的编写toString方法
print(Objects.toStringHelper(this)
.add("name", "Realfighter")
.add("age", null)
//注释omitNullValues后输出:ObjectsTest{name=Realfighter, age=null}
.omitNullValues()
.toString()); //ObjectsTest{name=Realfighter}
}

}

guava学习--Objects的更多相关文章

  1. Guava学习笔记(3):复写的Object常用方法

    转自:http://www.cnblogs.com/peida/p/Guava_Objects.html 在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals ...

  2. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  3. Guava学习笔记:复写的Object常用方法

    在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法.每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这 ...

  4. guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁

    guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...

  5. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  6. Guava学习

    Guava学习笔记目录 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concu ...

  7. [置顶] Guava学习之ArrayListMultimap

    ArrayListMultimap类的继承关系如下图所示: Guava ArrayListMultimap List Multimap 是一个接口,继承自 Multimap 接口.ListMultim ...

  8. [置顶] Guava学习之Splitter

    Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recogni ...

  9. [置顶] Guava学习之Iterators

    Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法.除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable ...

随机推荐

  1. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  2. python之RabbitMQ

    一.安装RabbitMQ 1. 安装erlang 1 2 3 4 tar xf otp_src_18.3.tar.gz cd otp_src_18.3 ./configure --prefix=/ma ...

  3. 税收基础知识 > 三税(营业税, 增值税, 所得税) + 关税

    三税:营业税 ▪ 增值税 ▪ 所得税 主要关注:一般纳税人, 起征点不详细描述. 营业税(Business tax) 营业税(Business tax),是对在中国境内提供应税劳务.转让无形资产或销售 ...

  4. 开发工具&环境

    远程拷贝:scp cdh4.tar.gz root@10.239.44.111 ~ gerrit for code review: git add . git commit -a git push o ...

  5. [转]表结构设计器EZDML介绍说明(包含修改配置文件,修改文本字段属性)

    超轻量级的表结构设计工具,这是一个数据库建表的小软件,可快速的进行数据库表结构设计,建立数据模型.类似大家常用的数据库建模工具如PowerDesigner.ERWIN.ER-Studio和Ration ...

  6. MS SQL-Server快捷键

    快捷键                    功能 Ctrl+Shift+B          生成解决方案 Ctrl+F7                  生成编译 Ctrl+O          ...

  7. 实现LRU的两种方法---python实现

    这也是豆瓣2016年的一道笔试题... 参考:http://www.3lian.com/edu/2015/06-25/224322.html LRU(least recently used)就不做过多 ...

  8. Latex引用插图格式制定问题(1)

    自定义新命令\reffig如下:\newcommand{\reffig}[1]{Figure \ref{#1}}在需要引用图片的时候,用\reffig代替\ref,就可以自动在图号前面输出" ...

  9. codeforces 748E Santa Claus and Tangerines

    E. Santa Claus and Tangerines time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  10. md语法之行内代码和代码片

    md语法之行内代码和代码片 比如说要在行内写上一句或者半句代码(代码的意思就是某种脚本语言), 用撇号围起来就可以了. 比如: import pandas as pd 写代码片(单独的一块脚本语言)的 ...