Angenommen, ich habe eine generische Container-Typ wie folgt aus:Wie implementiere ich Equals für generische Typen?
public final class Container<T> {
public final T t;
public Container(final T t) {
this.t = t;
}
}
ich so implementieren möchten gleich, dass dies passiert:
final Container<Object> a = new Container<>("Hello");
final Container<String> b = new Container<>("Hello");
assertNotEquals(a, b);
Die Instanzen a
und b
anders sein sollte, weil ihre Art Parameter T
ist anders.
Aufgrund der Löschung ist dies jedoch schwierig zu tun. Diese Implementierung, zum Beispiel, ist falsch:
@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;
}
Ich erwarte, dass ich eine Art von Token für T
speichern müssen.
Wie implementiere ich Equals für generische Typen?
This beantwortet die Frage nicht.
Es hat wirklich nichts zu tun w ie Löschung. Wenn Sie Arrays verwenden, wo kein Löschen möglich ist, wie 'Object [] a = {" Hello "}; String [] b = {"Hallo"}; ',' a [0] .equals (b [0]) 'würde immer noch' true' zurückgeben. Die Operation 'equals' verwendet die Laufzeittypen des Objekts. – RealSkeptic