Ihre Klasse Pair
muss equals()
und hashCode()
implementieren und Sie sind fertig. List.contains()
wird mit der Methode equals()
des Typs implementiert. Weitere Informationen finden Sie in der API für List.contains()
. (Bearbeitet ein wenig um Kommentare von @maaartinus zu beantworten, deren Antwort du lesen solltest b / c die Beobachtungen sind solide, und es ist ein bisschen lächerlich für mich, sie hier einzutragen. Wie maaartinus darauf hinweist, wäre eine Best-Practice hier Vermeiden Sie fehleranfällige manuelle Definitionen für equals und hashcode und bauen Sie stattdessen auf Guavas Hilfsfunktionen für Nullable gleich und hashCode für n Objekte ).
Mit passender equals()
können Sie jetzt tun:
In Reaktion auf die folgenden Kommentare wäre es vielleicht besser, eine gute Referenz für "Warum muss ich hashCode()
implementieren?" hinzuzufügen.
JavaPractices.com - Implementieren von equals()
- "Wenn Sie gleichwertig überschreiben , Sie müssen HashCode "
Object.equals()
Vertrag wie in der API-Dokumentation definiert
Die Implementierung in der Antwort von andersoj
%Vor%ist falsch: Die Null-Tests legen eindeutig nahe, dass null ein zulässiger Wert für links und rechts ist. Es gibt also mindestens zwei Probleme:
new Pair(null, null).hashCode()
löst NPE new Pair(null, null)
ist NICHT gleich selbst! Schauen Sie sich Guava Klassenobjekte für eine korrekte Implementierung an. Verwenden Sie es oder schreiben Sie eine statische Hilfsmethode wie
%Vor%und benutze sie immer.
Schreiben Sie niemals equals
mit einem Null-Test.
Es ist zu leicht, es zu blasen, und niemand hat es bemerkt. Mit dem Helfer ist es einfach, es richtig zu machen:
%Vor%Natürlich ist das Verbot von Nullen im Konstruktor auch eine Option.
Tags und Links java collections