覆盖java中的equals和hashcode方法?

时间:2013-12-12 06:53:50

标签: java hashcode java-ee-7

我在课堂下面。

Request.java

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()

2 个答案:

答案 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;
}