У меня есть классы вроде ниже
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
Я хочу создать глобальную очередь, где, если объект C существует в очереди B, должен быть добавлен, но не наоборот. Поэтому перед # 1 я перебираю элементы внутри набора, делающие element.equals(B) с добавлением на false.
Но 1 вызывает B.equals(C), который возвращает true, и поэтому mySet имеет только один объект C после этой строки
2 снова вызывает B.equals(C), который возвращает true и удаляет существующий объект C. В этом случае не должно быть C.equals(B)? Я ожидаю, что эта строка будет no-action
Это неправильное использование CopyOnWriteArraySet?
Спасибо, что посмотрели