我在课堂下面。
public class Request implements Serializable {
private String id;
private String name;
private String hid;
// getters and setters
// This class does not override any equals() and hashCode() methods
}
public class EmpRequest implements Serializable {
private Request request;
//Now here in this class I need override equals() and hashCode() methods based on **request**
}
在EmpRequest课程中,我需要根据请求对象的属性覆盖equals()
和hashCode()
。
如果两个请求对象 id 相等,那么我需要返回 true 。 如果两个对象ID不相等,那么我需要检查名称和 hid 属性。 如果两个对象的name和hid属性相等,那么我需要返回true。 其他错误
我该怎么做?我尝试覆盖equals()
和hashCode()
,但是eclipse在警告之下给了我。
字段类型“com.mycompany.Request”未实现
equals()
和hashCode()
- 生成的代码可能无法正常运行。
在同一类型下,我无法修改请求类,因为我无法控制它。
考虑到上述情况,我如何撰写equals()
和hashCode()
?
答案 0 :(得分:2)
您可以从IDE(Eclipse,IntelliJ IDEA)生成equals()
和hashCode()
。这对你的场景来说足够了。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Result)) return false;
Result result = (Result) o;
if (hid != null ? !hid.equals(result.hid) : result.hid != null) return false;
if (id != null ? !id.equals(result.id) : result.id != null) return false;
if (name != null ? !name.equals(result.name) : result.name != null) return false;
return true;
}
@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (hid != null ? hid.hashCode() : 0);
return result;
}
答案 1 :(得分:0)
编辑:
public class Request implements Serializable{
private String id;
private String name;
private String hid;
public String getId()
{
return id;
}
public String getName()
{
return name;
}
public String getHid()
{
return hid;
}
}
public class EmpRequest implements Serializable{
private Request request;
public Request getRequest()
{
return request;
}
@Override
public boolean equals(Object obj) {
if(obj==null)
return false;
if(((EmpRequest) obj).getRequest().getId().equals(this.getRequest().getId()))
return true;
else if(((EmpRequest) obj).getRequest().getName().equals(this.getRequest().getName())
&&((EmpRequest) obj).getRequest().getHid().equals(this.getRequest().getHid())) {
return true;
}
else
return false;
}
}
这也是哈希码:
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((getRequest().getId() == null) ? 0 : getRequest().getId().hashCode());
result = prime * result + ((getRequest().getName() == null) ? 0 : getRequest().getName().hashCode());
result = prime * result + ((getRequest().getHid() == null) ? 0 : getRequest().getHid().hashCode());
return result;
}