Comment étendre HashCodeBuilder et EqualsBuilder - Java - Programmation
MarshPosté le 29-02-2012 à 17:56:32
Bonjour,
Pour gérer mes les méthodes "hashCode()" et "equals()" de mes classes, je suis tombé sur HashCodeBuilder et EqualsBuilder (présents dans commons-lang.jar, package org.apache.commons.lang.builder).
J'ai vu qu'il était très facile de générer un hashCode en utilisant l'appel suivant :
Code :
@Override
publicint hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
De ce que j'ai vu de la manière de fonctionner de cette méthode, elle créer un builder de type "HashCodeBuilder" et effetue une série d'appels aux méthodes "append()". Or, je voudrais, pour certains de mes types, effectuer un append spécial. Mon idée principale était d'étendre "HashCodeBuilder" et d'ajouter mon append, comme suit :
Le problème est que la méthode static "HashCodeBuilder.reflectionHashCode()" créer un builder de type HashCodeBuilder et non pas MonHashCodeBuilder, voici le code source
Code :
publicstaticint reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object,
boolean testTransients, Class reflectUpToClass, String[] excludeFields) {
if (object == null) {
thrownew IllegalArgumentException("The object to build a hash code for must not be null" );
}
HashCodeBuilder builder = new HashCodeBuilder(initialNonZeroOddNumber, multiplierNonZeroOddNumber);
J'aurai pu surcharge cette méthode, mais le problème c'est que la méthode "reflectionAppend()" (lignes 9 et 12) est privée pour "HashCodeBuilder" (et la surcharger implique de surcharger tout un tas d'autres méthodes), et comme il n'y a pas moyen de passer le builder en argument je suis un peu bloqué.
Je pourrais aussi créer mon builder, et faire autant d'append que j'ai d'attributs, mais je perds dans ce cas l'intérêt de la méthode simple.
J'ai le même problème pour EqualsBuilder.
Si vous avez des idées, je suis preneur. Merci d'avance
Marsh Posté le 29-02-2012 à 17:56:32
Bonjour,
Pour gérer mes les méthodes "hashCode()" et "equals()" de mes classes, je suis tombé sur HashCodeBuilder et EqualsBuilder (présents dans commons-lang.jar, package org.apache.commons.lang.builder).
J'ai vu qu'il était très facile de générer un hashCode en utilisant l'appel suivant :
De ce que j'ai vu de la manière de fonctionner de cette méthode, elle créer un builder de type "HashCodeBuilder" et effetue une série d'appels aux méthodes "append()".
Or, je voudrais, pour certains de mes types, effectuer un append spécial. Mon idée principale était d'étendre "HashCodeBuilder" et d'ajouter mon append, comme suit :
Le problème est que la méthode static "HashCodeBuilder.reflectionHashCode()" créer un builder de type HashCodeBuilder et non pas MonHashCodeBuilder, voici le code source
J'aurai pu surcharge cette méthode, mais le problème c'est que la méthode "reflectionAppend()" (lignes 9 et 12) est privée pour "HashCodeBuilder" (et la surcharger implique de surcharger tout un tas d'autres méthodes), et comme il n'y a pas moyen de passer le builder en argument je suis un peu bloqué.
Je pourrais aussi créer mon builder, et faire autant d'append que j'ai d'attributs, mais je perds dans ce cas l'intérêt de la méthode simple.
J'ai le même problème pour EqualsBuilder.
Si vous avez des idées, je suis preneur.
Merci d'avance