好吧,这确实是一个简单的问题,但我不明白为什么我的代码不能正常工作。
在我正在使用的第三方库中,在某个时刻完成了类似的事情:
Object value = someValue;
Object compareValue = someOtherValue;
if(value.equals(compareValue))
// do something
现在,我的对象是同一类的实例,重写等于以下约定:
@Override
public boolean equals(Object obj) {
jvm 无论如何都会调用对象类定义的 equals,这给了我一个不想要的行为。 我怎样才能解决这个问题? 我再说一遍,调用代码是一个我无法修改的外部库。
编辑:这是我的类(class)的完整代码:
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 生成的。
最佳答案
这是一个建筑问题。 Maven 和 Netbeans 的复杂组合发生了一些故障。这意味着我正在调试的代码是一个过时的版本,不包含 equals 方法。
抱歉浪费了您的时间。
关于java,重写和等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254633/