2017-05-12 1 views
0

Suche nach einer Methode zur einfachen Berechnung von Hashes für beliebige Typen. Angesichts der folgenden Klasse:Hashcode mit generischen Typen

class Foo<T> { 
    ... 
    T value; 
} 

Ich habe bereits außer Kraft gesetzt, die equals Methode Objects.deepEquals mit den value Felder zu vergleichen. Gibt es eine einfache Möglichkeit, das Gleiche mit hashCode zu tun? Einige Hilfsmethoden in Guava oder Apache Commons (ich benutze sie bereits für andere Dinge)?

Leider Objects.hash(field1, ... , value) funktioniert nicht, wenn Wert ein Array ist.

Ich kenne eine Option

Arrays.deepHashCode(new Object[]{ field1, ... , value }); 

zu tun ist, aber es fühlt sich falsch ein neues Array für das zu schaffen, anstatt sie nur

+3

Ich würde nur value.equals() und value.hashCode(): Arrays passen nicht gut mit Generika, sollten sie in der Regel nicht verwendet werden, und wenn sie (anstelle von Listen, für Beispiel) sollte der Aufrufer wissen, dass zwei verschiedene Arrays nie gleich sind. Sehen Sie sich beispielsweise die Klasse an. Zwei Listen sind gleich, wenn ihre Elemente gleich sind. Es ist egal, ob die Elemente Arrays sind. –

+0

Guava hat wirklich nichts für dieses Problem, da sie [AutoValue] (https://github.com/google/auto/tree/master/value) empfehlen. –

Antwort

Verwandte Themen