假設我有一個通用的容器類型這樣的:如何爲泛型類型實現equals?
public final class Container<T> {
public final T t;
public Container(final T t) {
this.t = t;
}
}
我想要實現等於使得該通行證:
final Container<Object> a = new Container<>("Hello");
final Container<String> b = new Container<>("Hello");
assertNotEquals(a, b);
的情況下a
和b
應該是不同的,因爲它們的類型參數T
是不同。
但是,由於擦除,這是很難做到的。此實現,例如,不正確:
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj != null && obj instanceof Container<?>) {
final Container<?> other = (Container<?>)obj;
return Objects.equals(this.t, other.t);
}
return false;
}
我期望我會需要存儲一些類型的令牌爲T
。
如何爲泛型類型實現equals?
This不回答這個問題。
它確實無關w刪除。如果你使用數組,沒有擦除,比如'Object [] a = {「Hello」}; String [] b = {「Hello」};','a [0] .equals(b [0])'仍然會返回'true'。 equals操作使用對象的運行時類型。 – RealSkeptic