两种简单的方式快速实现hashCode 和 equals方法
2014-06-11 22:14
801 查看
我们在写domain model类, 有时候需要重写hashCode和equals,以便可以把这个类当成List或者Map的Key来用。
有两种方法可以很方便地去帮我们实现:
1. 使用eclipse工具。右击代码->Source->Generate hashCode and equals()...
eclispe会根据你的model类里面的属性,帮你生成hashCode和equals方法,例如
public class Test implements Serializable {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (id == null) {
if (other.id != null)
return false;
}
else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
}
else if (!name.equals(other.name))
return false;
return true;
}
}
2. 如果觉得hashCode和equals方法看上去不够简洁,可以使用org.apache.commons.lang.builder.HashCodeBuilder和org.apache.commons.lang.builder.EqualsBuilder
public class Test implements Serializable {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(this.id).append(this.name)
.toHashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Test)) {
return false;
}
Test o = (Test) obj;
return new EqualsBuilder().append(this.id, o.id).append(this.name,
o.name).isEquals();
}
}
有两种方法可以很方便地去帮我们实现:
1. 使用eclipse工具。右击代码->Source->Generate hashCode and equals()...
eclispe会根据你的model类里面的属性,帮你生成hashCode和equals方法,例如
public class Test implements Serializable {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (id == null) {
if (other.id != null)
return false;
}
else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
}
else if (!name.equals(other.name))
return false;
return true;
}
}
2. 如果觉得hashCode和equals方法看上去不够简洁,可以使用org.apache.commons.lang.builder.HashCodeBuilder和org.apache.commons.lang.builder.EqualsBuilder
public class Test implements Serializable {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(this.id).append(this.name)
.toHashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Test)) {
return false;
}
Test o = (Test) obj;
return new EqualsBuilder().append(this.id, o.id).append(this.name,
o.name).isEquals();
}
}
相关文章推荐
- 两种简单的方式快速实现hashCode 和 equals方法
- 用两种方法快速简单的实现窗口淡入淡出
- 用两种方法快速简单的实现窗口淡入淡出
- 最简单快速的apache二级域名实现方法
- 最简单快速的Apache二级域名实现方法介绍
- java对象通用方法之覆盖equals时请遵守通用约定、覆盖equals时总要覆盖hashCode、始终要覆盖toString、考虑实现Comparable接口
- 简单快速的Apache二级域名实现方法介绍
- 学习笔记:自定义方法的两种实现方式
- Java 多线程的两种简单实现方法
- 最简单快速的Apache二级域名实现方法介绍
- 采用commons-lang.jar包实现equals,hashCode以及toString方法
- <HTTP>ASI实现的注册方法:利用http的get和post两种方式
- hibernate之什么时候必须实现equals()和hashCode()方法?
- 用两种方式实现简单的隔行变色 用js实现
- 让客户端把ASP文件以XML的方式来处理最简单的实现方法.
- Java语言规范要求equals方法具有的特性以及实现方式
- 默认实现了equals,hashcode,tostring方法的pojo基类
- 为实现非系统类作为Map的key需要覆写hashCode()和equals()方法
- string 有两种比较的方式,一种是“==”另一种为“equals()”方法
- 两种方法使用jquery实现左右移动效果(包含each遍历方式)