2010-06-10 51 views

Respuesta

16

Por desgracia, no creo que hay una - que es un dolor en términos de proporcionar mapas de hash, etc con las comparaciones de igualdad personalizados :(

Obviamente hay Comparable<T> como un equivalente a IComparable<T> y Comparator<T> para IComparer<T>, pero no creemos que haya ninguna equivalente de IEqualityComparer<T> y IEquatable<T>.

puede haber bibliotecas de terceros que proporcionan el mismo tipo de interfaz y mapas que los utilizan, por supuesto ...

+0

No sería demasiado difícil crear un decorador delegante que implemente 'Map' y su propia interfaz' Equatable' (* ¿es incluso una palabra? *). – Esko

+0

@Esko: ¿Te refieres a hacer que el mapa subyacente contenga claves proxy, efectivamente? Es factible, pero sería feo ... y sospecho que crearía problemas cuando intentaste hacer mapas débiles, etc. Habría sido mucho mejor si hubiera estado allí para empezar. –

+0

¿Por qué no de esa manera también? Proxying a través de 'WeakReference' tampoco debería ser demasiado trabajo extra. Aunque veo tu punto, C# tiene muchas de estas cosas implementadas fácilmente, mientras que a Java le gusta ser el lenguaje "barebones". Supongo que Google Collections puede tener algo para esto a través de su sistema Predicado/Función, pero no estoy seguro ... – Esko

6

Si solo está buscando esa interfaz para implementar el método equals(), puede anular directamente el método object.equals().

+1

una buena modificación de la implementación de 'equals()' se puede encontrar aquí: http://stackoverflow.com/questions/185937/overriding-the-java-equals-method-quirk – Julien

1

La interfaz IEquatable<T> es principalmente útil con clases genéricas que almacenan muchas instancias de lo que puede ser unboxed tipos de estructura; es marginalmente útil con tipos sellados, y peor que inútil con los tipos no sellados. Por lo tanto, realmente no tendría sentido implementar IEquatable<T> en Java.

Cuestiones relacionadas