兩種簡單的方式快速實現hashCode 和 equals方法
我們在寫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();
}
}