您的位置:首页 > 其它

两种简单的方式快速实现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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: