采用commons-lang.jar包实现equals,hashCode以及toString方法
2012-02-05 10:35
399 查看
通过commons-lang.jar包实现一个javabean的equals,hashCode和toString三个方法,一般情况下,用手工直接实现这三个方法比较繁琐,
而采用common-lang.jar实现起来就比较容易了。下面即是其实现的具体代码:
1
package per.jone;
2
import java.util.Date;
3
import org.apache.commons.lang.builder.EqualsBuilder;
4
import org.apache.commons.lang.builder.HashCodeBuilder;
5
import org.apache.commons.lang.builder.ToStringBuilder;
6
public
class MyBean
{
7
private Date date;
8
private String str;
9
private
int age;
10
11
public MyBean(Date date, String str,
int age)
{
12
super();
13
this.date
= date;
14
this.str
= str;
15
this.age
= age;
16
}
17
public Date getDate()
{
18
return date;
19
}
20
public
void setDate(Date date)
{
21
this.date
= date;
22
}
23
public String getStr()
{
24
return str;
25
}
26
public
void setStr(String str)
{
27
this.str
= str;
28
}
29
public
int getAge()
{
30
return age;
31
}
32
public
void setAge(int age)
{
33
this.age
= age;
34
}
35
36
@Override
37
public
boolean equals(Object obj)
{
38
if(obj==null)
{
39
return
false;
40
}
41
if(obj==this)
{
42
return
true;
43
}
44
if(obj.getClass()!=this.getClass())
{
45
return
false;
46
}
47
MyBean mb
= (MyBean)obj;
48
return
new EqualsBuilder().append(this.date, mb.getDate()).append(this.str,
mb.getStr())
49
.append(this.age, mb.getAge()).isEquals();
50
}
51
52
@Override
53
public
int hashCode()
{
54
return
new HashCodeBuilder(17,37).append(this.date).append(this.str).append(this.age).toHashCode();
55
//注意:HashCodeBuilder这个构造器的两个参数必须为奇数。
56
}
57
58
@Override
59
public String toString()
{
60
return
new ToStringBuilder(this).append("date",this.date).append("str",this.str).append("age",this.age).toString();
61
}
62
}
我们可以看到依然需要手动维护这么多的属性,在common-lang.jar包里面还可通过反射机制来实现这三个方法,便于代码的维护,具体实现如下:
1
@Override
2
public
boolean equals(Object obj)
{
3
return EqualsBuilder.reflectionEquals(this, obj);
4
}
5
@Override
6
public
int hashCode()
{
7
return HashCodeBuilder.reflectionHashCode(this);
8
}
9
@Override
10
public String toString()
{
11
return ToStringBuilder.reflectionToString(this);
12
}
而采用common-lang.jar实现起来就比较容易了。下面即是其实现的具体代码:
1
package per.jone;
2
import java.util.Date;
3
import org.apache.commons.lang.builder.EqualsBuilder;
4
import org.apache.commons.lang.builder.HashCodeBuilder;
5
import org.apache.commons.lang.builder.ToStringBuilder;
6
public
class MyBean
{
7
private Date date;
8
private String str;
9
private
int age;
10
11
public MyBean(Date date, String str,
int age)
{
12
super();
13
this.date
= date;
14
this.str
= str;
15
this.age
= age;
16
}
17
public Date getDate()
{
18
return date;
19
}
20
public
void setDate(Date date)
{
21
this.date
= date;
22
}
23
public String getStr()
{
24
return str;
25
}
26
public
void setStr(String str)
{
27
this.str
= str;
28
}
29
public
int getAge()
{
30
return age;
31
}
32
public
void setAge(int age)
{
33
this.age
= age;
34
}
35
36
@Override
37
public
boolean equals(Object obj)
{
38
if(obj==null)
{
39
return
false;
40
}
41
if(obj==this)
{
42
return
true;
43
}
44
if(obj.getClass()!=this.getClass())
{
45
return
false;
46
}
47
MyBean mb
= (MyBean)obj;
48
return
new EqualsBuilder().append(this.date, mb.getDate()).append(this.str,
mb.getStr())
49
.append(this.age, mb.getAge()).isEquals();
50
}
51
52
@Override
53
public
int hashCode()
{
54
return
new HashCodeBuilder(17,37).append(this.date).append(this.str).append(this.age).toHashCode();
55
//注意:HashCodeBuilder这个构造器的两个参数必须为奇数。
56
}
57
58
@Override
59
public String toString()
{
60
return
new ToStringBuilder(this).append("date",this.date).append("str",this.str).append("age",this.age).toString();
61
}
62
}
我们可以看到依然需要手动维护这么多的属性,在common-lang.jar包里面还可通过反射机制来实现这三个方法,便于代码的维护,具体实现如下:
1
@Override
2
public
boolean equals(Object obj)
{
3
return EqualsBuilder.reflectionEquals(this, obj);
4
}
5
@Override
6
public
int hashCode()
{
7
return HashCodeBuilder.reflectionHashCode(this);
8
}
9
@Override
10
public String toString()
{
11
return ToStringBuilder.reflectionToString(this);
12
}
相关文章推荐
- 使用commons-lang.jar包以及反射机制实现javabean的equals,hashCode和toString三个方法重写
- java对象通用方法之覆盖equals时请遵守通用约定、覆盖equals时总要覆盖hashCode、始终要覆盖toString、考虑实现Comparable接口
- 重新编写equals()方法,hashCode()方法,以及toString(),提供自定义的相等标准,以及自描述方法
- NO8-10 实现高质量的equals方法,hashCode()方法,toString()方法
- 默认实现了equals,hashcode,tostring方法的pojo基类
- [项目bug收集整理2] Map的key,如果是非内置对象,需要自己实现hashCode和equals方法
- 实体类自动重写toString(),equals()和hashCode()方法
- Object 开发中常用的重写方法总结toString,equals,hashCode,compareTo
- Object类中equals,hashCode和toString方法的学习
- IDEA get/set/重写equals()、hashcode()\toString()等 方法快捷键
- 为什么SpringAOP使用JDK动态代理时好像没有代理Object.[equals()、hashCode()、toString()]这三个方法
- 关于重写equals,hashcode以及compareTo方法
- 重写toString以及equals方法
- java中equals与hashCode还有tostring方法学习记录
- LinkedHashSet实现Hashcode和equals方法
- 关于重写equals,hashcode以及compareTo方法!
- Object常用方法介绍及注意事项equals(),hashCode(),getClass(),toString()
- [项目bug收集整理2] Map的key,如果是非内置对象,需要自己实现hashCode和equals方法
- ID的生成策略(hibernate的id生成策略,主键类为什么需要实现序列化接口,同时还要重写hashCode()和equals()方法)
- 关于重写equals,hashcode以及compareTo方法