使用泛型时是否需要使用'instanceOf'?

时间:2017-05-01 06:45:33

标签: java

我无法弄清楚如何使用泛型来编写我的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;
    }
}

}

1 个答案:

答案 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);
}

如果其中任何一项为空,则可能需要一些其他条件。