我无法弄清楚如何使用泛型来编写我的equals方法,因为我确信如果使用instanceOf是必要的。我试图比较两个ItemPairs是相同的(逻辑上等价)如果对中的两个项目是相同的(逻辑上等价)
以下是我的尝试:
public class ItemPair<T> {
private T item1;
private T item2;
public ItemPair(T item1, T item2) {
this.item1 = item1;
this.item2 = item2;
}
public T getItem1() {
return item1;
}
public void setItem1(T item1) {
this.item1 = item1;
}
public T getItem2() {
return item2;
}
public void setItem2(T item2) {
this.item2 = item2;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof T) {
return this.item1.equals(this.item2);
} else {
return false;
}
}
}
答案 0 :(得分:5)
您的equals
方法不应确定第一项是否等于同一ItemPair
对象的第二项。它应该确定两个ItemPair
是否彼此相等:
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof ItemPair))
return false;
IterPair other = (IterPair) obj;
return this.item1.equals(other.item1) && this.item2.equals(other.item2);
}
如果其中任何一项为空,则可能需要一些其他条件。