Guava(二):重写的那些Object方法

本文介绍Guava框架中处理对象比较、哈希码及字符串表示的方法,通过实例展示如何利用Guava避免空指针异常并提升代码质量。

说道equal方法,相信大家都是有爱有恨,爱的是此方法可以很方便的进行两个对象的是否相同比较,可恨的是你不知到调用他的对对象是否符合要求,也就是是不是会出现空指针调用也就是说如果这样的调用:

new Object().equals(new Object());

本身这句代码没有错,但是呢要是:以下的name是一个null的值怎么办,会出现怎么样的结果??

name.equals(name1);
这就是我们无法想象的错误,据了解世界上95%的程序bug于null有关,关于null 我们在以后的文章中在做具体的探讨。

然而就是以上我们很容易出现问题的代码,Guava在做了很好的包装,以后就是使用他了,这样我们可以很好的避免一些bug,而且还能很好的写出好更加优雅的代码。当然好的代码还是要自我约束。培养代码洁癖。

在来说一下Guava中的toString()方法和hashCode(),其实我写这个不是说我们必须这样写,也就是看到这个模块,我了解了一下java中的hashCode()方法的用意,下面我们来看一下java中的hashCode()的作用:提高数据在散列中的存储效率。

java代码中我们经常会重写equals()方法,但是千万要记住在重写了equals()方法之后也要记得重写hashCode()方法,为什么呢,这个我们在另外一篇文章中进行探讨。

下面我们来看一下我们今天进行的Guava的学习笔记,废话不说,上代码:

compareTo(Person that) {
            return ComparisonChain.start()
                   import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;

import java.util.Collections;
import java.util.List;

/**
 * Created by luyangli on 15-9-16.
 * <p/>
 * 常见的Object方法
 */
public class ObjectTest {
    public static void main(String[] args) {
        System.out.println(Objects.equal("q", "q"));
        System.out.println(Objects.equal("a", null));
        System.out.println(Objects.equal(null, "a"));
        System.out.println(Objects.equal(null, null));

        System.out.println(Objects.hashCode("a", "b", "c"));
        System.out.println(Objects.toStringHelper("ObjectTest").add("x", 1).toString());
        //new Object().hashCode();

        Person changhaha = new Person("常哈哈", 23);
        Person lilulu = new Person("李露露", 24);
        List<Person> personList = Lists.newArrayList();
        personList.add(lilulu);
        personList.add(changhaha);
        for (Person person : personList) {
            System.out.println(person.getName() + ":" + person.getAge());
        }
        System.out.println("====排序后====");
        Collections.sort(personList);
        for (Person person : personList) {
            System.out.println(person.getName() + ":" + person.getAge());
        }
    }

    static class Person implements Comparable<Person> {
        private String name;
        private int age;

        public Person() {
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        @Override
//        public int compareTo(Person other) {
//            int i = this.name.compareTo(other.getName());
//            if (0 == i) {
//                return this.age - other.getAge();
//            }
//            return i;
//        }
    
	public int compareTo(Person that) {
   	 return ComparisonChain.start()
            .compare(this.getName(), that.getName())
            .compare(this.getAge(), that.getAge())
            .result();
	}
}}

其中我屏蔽掉的是我使用常规的数据排序操作,我们来看一下我们的执行结果:

true
false
false
true
126145
ObjectTest{x=1}
李露露:24
常哈哈:23
====排序后====
常哈哈:23
李露露:24

我们可以看到其实Guava就是对于我们可能犯得低级错误进行了预防,可是就是这样的预防,我们很受用。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值