我到处都在寻找解决方案,但是我在代码中找不到任何错误。为什么ArrayList的contains(Object o)无法运行我覆盖的equals(Object o)方法?考虑以下代码:
private class TargetRC {
public RComponent rc;
public TargetRC(RComponent e) {
rc = e;
}
@Override
public boolean equals(Object o) {
if (o instanceof RComponent)
return o == rc;
else
return o == this;
}
}
private ArrayList<TargetRC> list = new ArrayList<TargetRC>();
public void add(RComponent e) {
list.add(new TargetRC(e));
System.out.println(list.contains(e));
}
如您所见,它是:
对称,因为当且仅当rc == o时o == rc
反身,因为rc == rc
比较中使用的任何RComponent。
通过在此处可见的add(...)方法添加任何元素始终打印为false。 equals(...)方法内没有println()起作用。将“ ==”运算符更改为equals(...)不会有任何区别。怎么了
最佳答案
你测试
list.contains(e)
其中
e
是RComponent
。因此,列表为列表中的每个元素调用
RComponent.equals(Object)
总是返回
false
。