您的位置:首页 > 移动开发 > Objective-C

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

2015-09-16 22:47 435 查看
说道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());

4000
}
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就是对于我们可能犯得低级错误进行了预防,可是就是这样的预防,我们很受用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: