Le Mon, 4 May 2009 17:11:46 +0200, Benjamin POUSSIN <poussin@codelutin.com> a écrit :
Tony, j'ai du mal à comprendre ton histoire de uniqueKeyHashCode, surtout au niveau du rôle de "this.keys".
oui, pareil :)
Sorry, je me suis mal exprimé, je recommence : Soit un objet A. On définit sur A une clef d'unicité K(A) = [p0(A),p1(A),...], où pi(A) est une propriété de A. (c'est une clef métier) On veut un algorithme pour vérifier que tous les objets d'une collection de A ont une clef K(A) différente. Dans mon code : this.keys = K(A) Pour chaque objet je calcule le hashCode correspondant à la méthode equals de la clef d'unicité. Je regarde ensuite si j'ai déjà rencontré ce hash : - si oui c'est que la clef a déjà été rencontrée, je peux quitter - sinon je conserve le hashCode et passe à l'élément suivant Mais vu qu'il n'y a pas d'équivalence entre o.equals(o1) et o.hashCode()== o1.hashCode(), donc on peut avoir un même hashCode sur mes clefs alors que les clefs sont différentes... Conclusion : cet algorithme fonctionne très bien si l'équivalence est respectée entre hashCode et equals et on peut l'utiliser si on utilise par exemple uniquement des types primitifs qui respecte la convention. Je vais mettre un restriction sur mon validateur pour qu'il ne fonctionne que sur des types primitifs, cela suffit à mon besoin pour le moment... C'est un peu plus clair ? :)