我有如下课程
class A {
@Override
public boolean equals(Object other) { return true }
}
Class B extends A {
}
Class C extends A {
@Override
public boolean equals(Object other) { if ((other != null) || (other instanceOf B)) return false; }
}
In my main() I have this following code
Set<A> mySet = new CopyOnWriteArraySet<A>();
mySet.add(C);
I want mySet to contain C at this point
mySet.add(B); // #1
I want mySet to contain C & B at this point
mySet.remove(B); // #2
I want mySet to contain C at this point
我想创建一个全局队列,如果队列 B 中存在对象 C,则应该允许添加,但反之则不行。所以在#1 之前,我循环遍历集合中的元素,执行 element.equals(B) 并添加 false。
但是 1 正在调用返回 true 的 B.equals(C) ,因此 mySet 在这一行之后只有一个 C 对象
2 再次调用 B.equals(C) ,它返回 true 并删除现有对象 C。在这种情况下不应该是 C.equals(B) 吗?我期待这条线不采取行动
这是对 CopyOnWriteArraySet 的错误使用吗?
感谢您的关注