guava学习--Objects
转载: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的更多相关文章
- Guava学习笔记(3):复写的Object常用方法
转自:http://www.cnblogs.com/peida/p/Guava_Objects.html 在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals ...
- Guava学习笔记目录
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- Guava学习笔记:复写的Object常用方法
在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法.每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这 ...
- guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁
guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- Guava学习
Guava学习笔记目录 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concu ...
- [置顶] Guava学习之ArrayListMultimap
ArrayListMultimap类的继承关系如下图所示: Guava ArrayListMultimap List Multimap 是一个接口,继承自 Multimap 接口.ListMultim ...
- [置顶] Guava学习之Splitter
Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recogni ...
- [置顶] Guava学习之Iterators
Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法.除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable ...
随机推荐
- redis 使用
Redis 使用 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...
- 简述id,instancetype和__kindof的区别
id: 好处:可以调用任何对象方法 坏处:不能进行编译检查 + (id)person; instancetype 好处:自动识别当前类的对象 坏处:不会提示返回的类型 + (instancetype) ...
- myeclipse快捷键
转: 当时我看到struts2讲解视频的时候,讲解员居然能一下子注释掉好几行代码,而且注释的很整齐,然我大吃一惊,上网搜了下Myeclipse的快捷键还真多选择你要注释的那一行或多行代码,按Ctrl+ ...
- fiddler如何修改request header
在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com) 然后刷新网站,在fiddler中点击被打断的网址,点击Inspectors—>Ra ...
- H5+CSS3做图片轮播滚动效果
HTML代码部分: <div id="wrap"> <ul id="list"> <li>10</li> < ...
- Jmeter从数据库获取数据当做变量,传递给其他接口
1.添加JDBC Request 2.JDBC的配置,Variable名字和之前的数据库配置的名字一致,生成的变量放在下面的Variable name
- Oracle客户端配置
1. 打开开发生产数据库系统,点击下载Oracle_12C_Client32,并且解压缩. 2. 找到文件下的setup.exe文件,并且执行. 3. 等待数秒,在如下界面中选择第二项,管理员, ...
- Python3基础 访问列表 小于指定索引值的所有元素
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- finish()在dialog中的作用
finish()在dialog中销毁的是dialog所在的活动:
- [转]Meta http-equiv属性详解
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...