Guava(二):重写的那些Object方法
2015-09-16 22:47
435 查看
说道equal方法,相信大家都是有爱有恨,爱的是此方法可以很方便的进行两个对象的是否相同比较,可恨的是你不知到调用他的对对象是否符合要求,也就是是不是会出现空指针调用也就是说如果这样的调用:
本身这句代码没有错,但是呢要是:以下的name是一个null的值怎么办,会出现怎么样的结果??
这就是我们无法想象的错误,据了解世界上95%的程序bug于null有关,关于null 我们在以后的文章中在做具体的探讨。
然而就是以上我们很容易出现问题的代码,Guava在做了很好的包装,以后就是使用他了,这样我们可以很好的避免一些bug,而且还能很好的写出好更加优雅的代码。当然好的代码还是要自我约束。培养代码洁癖。
在来说一下Guava中的toString()方法和hashCode(),其实我写这个不是说我们必须这样写,也就是看到这个模块,我了解了一下java中的hashCode()方法的用意,下面我们来看一下java中的hashCode()的作用:提高数据在散列中的存储效率。
java代码中我们经常会重写equals()方法,但是千万要记住在重写了equals()方法之后也要记得重写hashCode()方法,为什么呢,这个我们在另外一篇文章中进行探讨。
下面我们来看一下我们今天进行的Guava的学习笔记,废话不说,上代码:
其中我屏蔽掉的是我使用常规的数据排序操作,我们来看一下我们的执行结果:
我们可以看到其实Guava就是对于我们可能犯得低级错误进行了预防,可是就是这样的预防,我们很受用。
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就是对于我们可能犯得低级错误进行了预防,可是就是这样的预防,我们很受用。
相关文章推荐
- Objective-c单例模式的正确写法
- 谈Objective-C Block的实现
- 详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
- transform
- Objective-C之Foundation框架
- NSString方法总结
- Objective-C Runtime 运行时之五:协议与分类
- NSDate的简单总结
- Objective-C Runtime 运行时之四:Method Swizzling
- Objective-C Runtime 运行时之三:方法与消息
- Objective-C Runtime 运行时之二:成员变量与属性
- Objective-C Runtime 运行时之一:类与对象
- Block的简单记录
- Object-c内存管理
- Objective C 中 NSString类的用法
- Attempt to set a non-property-list object as an NSUserDefaults
- 谈Objective-C Block的实现
- 分类的总结
- Objective-C 【时间与日期处理】
- 设计模式之装饰模式(iOS开发,代码用Objective-C展示)