首页 技术 正文
技术 2022年11月14日
0 收藏 798 点赞 3,725 浏览 2973 个字

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); }
/*
*运行结果:
* 张三
* 哈哈
*/
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918