确定这是一个简单的问题,但我无法理解为什么我的代码无法正常运行。
在我使用的第三部分库中,在某个时刻完成了类似的事情:
Object value = someValue;
Object compareValue = someOtherValue;
if(value.equals(compareValue))
// do something
现在,我的对象是同一个类的实例,覆盖等于以下合同:
@Override
public boolean equals(Object obj) {
jvm无论如何调用对象类定义的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因为我使用调试器... 我使用的等于实现是由netbeans生成的。
答案 0 :(得分:1)
抱歉浪费你的时间。
答案 1 :(得分:0)
覆盖equals
方法并实现您自己的代码。您可以使用equals
运算符实现自己的instanceof
方法,实际检查实例变量的类型是否相同。这是用于比较两个字符串的代码。
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;
}
答案 2 :(得分:0)
jvm无论如何都要调用对象类
定义的等号
你是怎么知道JVM调用equals定义的对象类?
假设它被称为Object.eqauls
:即使你有重写的equals方法,IDE提供的默认实现(如eclipse)也在内部调用超类equals()
方法,在你的情况下可以是Object.eqauls
。
IDE自动生成的代码如下所示:
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
作为解决方案,请使用您自己的逻辑替换对super.equals()
的调用以进行比较。