guava复写Object常用方法


  

    Guava是一个Google的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,字符串处理,I/O和验证的实用方法,

 这些高质量的API可以使你的Java代码更加优雅,更加简洁,让你工作更加轻松愉悦

一、概述

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

很多类库提供了覆写这几个方法的工具类,Guava也提供了类似的方式,下面我们来看看Guava中这几个方法的简单使用

  Guava中Objects类提供了很多和Object类相同,效率更高的方法可供使用:

1、equals方法

  使用Object的equals方法进行相等判断,例如:test.equals("test");如果test为null,则会发生NullPointerException,Objects的equals方法可以帮助你避免

NullPointerException,它的判断逻辑是这样的:return a==b || (a!=null && a.equals(b));所以,可以很放心的使用,Objects.equals(test,"test")当然在JDK7中也

提供了同样的判断逻辑的方法:Objcets.equals(test,"test");

public class ObjectTest {

    @Test
public void equalTest() {
System.out.println(Objects.equal("a", "a"));
System.out.println(Objects.equal(null, "a"));
System.out.println(Objects.equal("a", null));
System.out.println(Objects.equal(null, null));
}
}
/**输出结果
* true
* false
* false
* true
*/

2、hashCode方法

对于hashCode首先要明白两点:

  1、如果equals()判断两个对象相等,那么它们的hashCode()方法一定返回同样的值

  2、并没有强制要求如果equals()判断两个对象不相等,它们的hashCode可以相同也可以不同

Guava提供给我们了一个更加简单的方法--Objects.hashCode(Object...),这是个可变参数,参数列表可以是任意数量,所以像这样

使用Object.hashCode(field1,field2,...fieldn),非常方便和简洁

import org.junit.Test;
import com.google.common.base.Objects; public class ObjectTest {
@Test
public void hashcodeTest() {
System.out.println(Objects.hashCode("a"));
System.out.println(Objects.hashCode("a"));
System.out.println(Objects.hashCode("a","b"));
System.out.println(Objects.hashCode("b","a"));
System.out.println(Objects.hashCode("a","b","c")); Person person=new Person("peida",);
System.out.println(Objects.hashCode(person));
System.out.println(Objects.hashCode(person));
}
} class Person {
public String name;
public int age; Person(String name, int age) {
this.name = name;
this.age = age;
}
}

//输出结果
128
4066
4096
126145
19313256
19313256

 

3、toStringHelper()方法

  因为每个类直接或间接地继承Object,因此每个类都有toString方法,这个方法是用的最多的,覆写的最多,一个好的toString方法对于调试来说是非常重要的

但是写起来确实很不爽,Guava也提供了toString()方法

通过toStringHelper方法来输出你需要输出的属性字段

import org.junit.Test;
import com.google.common.base.Objects; public class ObjectTest { @Test
public void toStringTest() {
//this代表当前类,这里只输出x一个属性字段
System.out.println(Objects.toStringHelper(this).add("x", 1).toString()); //代表输出对象为Person对象 System.out.println(Objects.toStringHelper(Person.class).add("x", 1).toString()); //add可以叠加
Person person=new Person("peida",23);
String result = Objects.toStringHelper(Person.class).add("name", person.name).add("age", person.age).toString();
System.out.print(result);
}
}
class Person {
public String name;
public int age; Person(String name, int age) {
this.name = name;
this.age = age;
}
}
//============输出===============
ObjectTest{x=1}
Person{x=1}
Person{name=peida, age=23}

4、firstNonNull方法

Object的firstNonNull方法可以根据传入的两个参数来返回一个非Null的参数,Guava现在推荐使用MoreObjects.firstNonNull(T first,T second)替代它。

import com.google.common.base.MoreObjects;

public class TestFilter {

    public static void main(String[] args) {
//name不为空
String name="张三";
String nann= MoreObjects.firstNonNull(name, "哈哈");
System.out.println(nann); //sex为null
String sex=null;
String sexx= MoreObjects.firstNonNull(sex, "哈哈");
System.out.println(sexx); }
/*
*运行结果:
* 张三
* 哈哈
*/
}

java代码(3)----guava复写Object常用方法的更多相关文章

  1. java代码之美(3)---guava 复写Object常用方法

    guava 复写Object常用方法 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方 ...

  2. 复写的Object常用方法

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

  3. 使用 Google Guava 美化你的 Java 代码

    文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMP ...

  4. List<Map<String,Object>>使用Java代码遍历

    List<Map<String,Object>>的结果集怎么使用Java代码遍历以获取String,Object的值: package excel; import java.u ...

  5. 使用 Google Guava 美化你的 Java 代码:1~4 【转】

    文章转载自:http://my.oschina.net/leejun2005/blog/172328 1.使用Google Collections,Guava,static imports编写漂亮代码 ...

  6. Java基础-字符串(String)常用方法

    Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Pr ...

  7. Linkedin工程师是如何优化他们的Java代码的(转)

    英文原文:LinkedIn Feed: Faster with Less JVM Garbage 最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍 ...

  8. java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  9. 【Java】HashMap源码分析——常用方法详解

    上一篇介绍了HashMap的基本概念,这一篇着重介绍HasHMap中的一些常用方法:put()get()**resize()** 首先介绍resize()这个方法,在我看来这是HashMap中一个非常 ...

随机推荐

  1. like模糊查询是否走索引

    1.模糊查询 后通配 走索引 前通配 走全表 2.where条件用in或or 不会走索引索引的本质是平衡b+数,是为了方便查询的平衡多路查找树 B-Tree相比,B+Tree有以下不同点: 每个节点的 ...

  2. 移动端APP自动化测试超全基础汇总

    目录 一.面试过程 1.自动化岗位要求 2.面试流程,面试类型 3.沟通技巧,不同级别要求 二.真实面试案例 1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么) 三.自我分析 1. ...

  3. vue $refs的静态绑定使用与动态绑定使用

    以下实例实现的同一个操作 静态使用 this.$refs.tbhead.clearSelection(); 动态使用 area="tbhead" //可以是函数传入的参数 this ...

  4. SSH三大框架知识点

    Hibernate ****************************************************************************************** ...

  5. env虚拟环境配置(两种)

    virtualenv(依赖关系难以解决) windows项目虚拟环境创建 # WINDOWS 环境使用虚拟环境# 在当前项目下# 安装 pip3 install virtualenv# 创建虚拟环境 ...

  6. C# 操作Orcle数据库

    1.首先添加NuGet:Oracle.ManagedDataAccess 2.配置连接数据库字符串:Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(H ...

  7. mysql小白系列_01 原理

    1.什么是MVCC?有什么作用? Multi-Version Concurrency Conrol 多版本并发控为解决数据库并发读写可能会出现不一致数据的情况,需要实现数据库的并发访问控制,写时复制产 ...

  8. 【一致性检验指标】Kappa(cappa)系数

    1 定义 百度百科的定义: 它是通过把所有地表真实分类中的像元总数(N)乘以混淆矩阵对角线(Xkk)的和,再减去某一类地表真实像元总数与被误分成该类像元总数之积对所有类别求和的结果,再除以总像元数的平 ...

  9. 25-12 空值处理(null值)

    --------------------空值处理--------------------- select * from TblStudent --查询所有年龄是null的同学学习信息 --null值无 ...

  10. UIAutomator2的API文档(一)

    检查并维持设备端守护进程处于运行状态,应该是重启了atx守护进程:d.healthcheck() 1.隐式等待 import uiautomator2 as u2serialno = '7f3dec6 ...