好吧,这真的是一个简单的问题,但是我不能理解为什么我的代码不能正常工作。
在我正在使用的第三部分库中,在某个点上完成了类似这样的操作:
Object value = someValue;
Object compareValue = someOtherValue;
if(value.equals(compareValue)) 
 // do something现在,我的对象是同一个类的实例,它的覆盖等同于下面的契约:
 @Override
public boolean equals(Object obj) {不管怎样,jvm调用object类定义的equals,这给了我一个不想要的行为。我该如何解决这个问题呢?我重复一遍,调用代码是一个不能修改的外部库。
编辑:这是我的类的完整代码:
public class MissionPriorityResolutionCriteria implements ResolutionCriteria {
private Satellite prioritySatellite;
public MissionPriorityResolutionCriteria(Satellite prioritySatellite) {
    this.prioritySatellite = prioritySatellite;
}
@Override
public int hashCode() {
    int hash = 5;
    hash = 53 * hash + (this.prioritySatellite != null ? this.prioritySatellite.hashCode() : 0);
    return hash;
}
@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final MissionPriorityResolutionCriteria other = (MissionPriorityResolutionCriteria) obj;
    if (this.prioritySatellite != other.prioritySatellite && (this.prioritySatellite == null || !this.prioritySatellite.equals(other.prioritySatellite))) {
        return false;
    }
    return true;
}
public Satellite getPrioritySatellite() {
    return prioritySatellite;
}
public void setPrioritySatellite(Satellite prioritySatellite) {
    this.prioritySatellite = prioritySatellite;
}
public boolean apply(SRASolution s) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}我知道他正在调用Object.equals,因为我使用了调试器...我使用的equals实现是由netbeans生成的。
发布于 2014-01-21 22:06:38
这是一个建筑问题。maven和netbeans的复杂组合出现了一些小故障。这意味着我调试的代码是一个过时的版本,不包含equals方法。
很抱歉浪费了你的时间。
发布于 2014-01-21 17:58:52
重写equals方法并实现您自己的代码。您可以使用instanceof操作符实现您自己的equals方法,该操作符实际检查实例变量的类型是否相同。这是用于比较两个字符串的代码。
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
      if (anObject instanceof String) {
           String anotherString = (String)anObject;
           int n = count;
           if (n == anotherString.count) {
               char v1[] = value;
                char v2[] = anotherString.value;
                int i = offset;
               int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                        return false;
                }
               return true;
            }
        }
       return false;
    }发布于 2014-01-21 17:59:45
无论如何,
jvm调用由object类定义的equals
您如何知道名为equals的JVM是由object类定义的?
假设调用的是Object.eqauls:即使您已经覆盖了equals方法,由集成开发环境提供的默认实现(比如eclipse )也会在内部调用超类equals()方法,在本例中可以是Object.eqauls。
IDE自动生成的代码将如下所示:
@Override
public boolean equals(Object obj) {
    // TODO Auto-generated method stub
    return super.equals(obj);
}作为一种解决方案,将对super.equals()的调用替换为您自己的逻辑以进行比较。
https://stackoverflow.com/questions/21254633
复制相似问题