转载: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. NOIP2014 day2 T2寻找道路

    #include<iostream> #include<cmath> #include<cstdlib> #include<cstdio> #inclu ...

  2. Python3基础 casefold 将字符串中的所有字符变成小写

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  3. GUI 下

    11.6 Swing组件 JButton JLabel JTextField JTextArea JTable JTree publicclass JTableDemo extends JFrame ...

  4. web前端之HTML的前世今生

    一个尖括号   < 一个尖括号能干什么    < ? 你可以编出一顶帽子  <(:-p 或一张笑脸    :-> 或诉说一份爱   <3 或者更直接一些 <!DOC ...

  5. [Bug]枚举数组,并找到某些元素删除

    lldb报错:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <_ ...

  6. B/S网站中IE6兼容问题

    在HTML中定义的样式,部分样式在IE7以前的版本中的效果是不同的,所以需要在网页中定义让浏览器以IE8的模式启动. 在HEAD中定义标签meta如下: <meta http-equiv=&qu ...

  7. DNS域名解析服务器

    域名解析服务器,靠它把你要访问的网址找到然后把信息送到你电脑上.DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主 ...

  8. TCP/IP协议学习(四) 基于C# Socket的Web服务器---静态资源处理

    目录 1. C# Socket通讯 2. HTTP 解析引擎 3. 资源读取和返回 4. 服务器测试和代码下载 Web服务器是Web资源的宿主,它需要处理用户端浏览器的请求,并指定对应的Web资源返回 ...

  9. 转-阿里云CentOS Linux服务器上用postfix搭建邮件服务器

    http://www.cnblogs.com/dudu/archive/2012/12/12/linux-postfix-mailserver.html 注:本文的邮件服务器只用于发送邮件,也就是ST ...

  10. Eenterprise linux服务器分区

    分区说明: (在MBR格式的硬盘下我会分/ /boot swap /data 四个分区,不建议在服务器上面使用LVM,中大型企业的IDC都是有存储区域的,专门管理硬盘容量的.)(分区的时候,请注意顺序 ...