好吧,這真的是一個簡單的問題,但我不明白爲什麼我的代碼無法正常工作。java,覆蓋和等於
在我使用的是第三部分庫,在某一點上是這樣做:
Object value = someValue;
Object compareValue = someOtherValue;
if(value.equals(compareValue))
// do something
現在,我的對象是同一個類的實例,即重寫equals具有以下合同:
@Override
public boolean equals(Object obj) {
jvm anyway調用由對象類定義的等於,給我一個不想要的行爲。 我該如何解決這個問題? 我重複說調用代碼是我無法修改的外部庫。
編輯:這是我班的全碼:
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生成。
如果你已經正確地重寫了等號,那就不會發生。 – Kayaman
請分享你的等於執行... – Frank
http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java你有沒有正確的覆蓋它? –