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

来源:互联网 发布:程序员考试难吗 编辑:程序博客网 时间:2024/06/07 18:03

说道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();}
}}

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

truefalsefalsetrue126145ObjectTest{x=1}李露露:24常哈哈:23====排序后====常哈哈:23李露露:24

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








0 0
原创粉丝点击