package com.mingjian.entity;
import java.io.Serializable;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* 把一个对象放到集合框架中的对象中,必须实现equals和hashCode方法,
* 若是对这个类的对象进行排序,必须实现Comparable接口中的compareTo方法。
* @author mingjian.zheng
*
*/
public class Course implements Serializable,Comparable<Course>{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* equals契约不适用于null对象,而且两种不同类型的对象不能相等,equals方法显然有别于==操作符
* (如果两个对象有相同的引用,后者将返回true,因此两个对象必相等)。两个对象可以相等(equals返回true),
* 但是使用不同的引用
*/
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(this == obj){
return true;
}
if(obj == null || obj.getClass() != this.getClass()){
return false;
}
Course course = (Course)obj;
return new EqualsBuilder().append(this.id, course.id).append(this.name, course.name).isEquals();
}
/**
* hashCode方法也有一个契约,但是不像equals的契约那样正式。和equals一样,结果必须一致。对于对象foo和bar,
* 如果foo.equals(bar)返回true,那么foo和bar的hashCode方法必须返回相同的值。如果foo和bar不相等,则不要求
* 返回不同的散列码,但是Javadocs提到,若果这些对象有不同的结果,通常会运行的更好一些
*
* 重要的是要正确的初始化HashCodeBuilder。构造函数带有两个int,它使用这两个参数来创建一个散列码
* 这两个int必须是奇数
*/
@Override
public int hashCode() {
// TODO Auto-generated method stub
return new HashCodeBuilder(11,21).append(this.id).append(this.name).toHashCode();
}
/**
* 控制对象如何排序
*/
public int compareTo(Course o) {
// TODO Auto-generated method stub
return new CompareToBuilder().append(this.id, o.id).append(this.name, o.name).toComparison();
}
@Override
public String toString() {
// TODO Auto-generated method stub
return new ToStringBuilder(this).append("id",this.id).append("name",this.name).toString();
}
}