Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1228 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comment étendre HashCodeBuilder et EqualsBuilder

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment étendre HashCodeBuilder et EqualsBuilder

n°2128971
electricbl​ue
Pas très inspiré...
Posté le 29-02-2012 à 17:56:32  profilanswer
 

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 :
  1. @Override
  2. public int hashCode() {
  3.  return HashCodeBuilder.reflectionHashCode(this);
  4. }


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 :

Code :
  1. public class MonHashCodeBuilder extends HashCodeBuilder {
  2.  public MonHashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber) {
  3.   super(initialNonZeroOddNumber, multiplierNonZeroOddNumber);
  4.  }
  5.  public HashCodeBuilder append(MonType mt) {
  6.   // Traitement spécial
  7.  }
  8. }


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 :
  1. public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object,
  2.   boolean testTransients, Class reflectUpToClass, String[] excludeFields) {
  3.  if (object == null) {
  4.   throw new IllegalArgumentException("The object to build a hash code for must not be null" );
  5.  }
  6.  HashCodeBuilder builder = new HashCodeBuilder(initialNonZeroOddNumber, multiplierNonZeroOddNumber);
  7.  Class clazz = object.getClass();
  8.  reflectionAppend(object, clazz, builder, testTransients, excludeFields);
  9.  while (clazz.getSuperclass() != null && clazz != reflectUpToClass) {
  10.   clazz = clazz.getSuperclass();
  11.   reflectionAppend(object, clazz, builder, testTransients, excludeFields);
  12.  }
  13.  return builder.toHashCode();
  14. }


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 :)
 

mood
Publicité
Posté le 29-02-2012 à 17:56:32  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comment étendre HashCodeBuilder et EqualsBuilder

 

Sujets relatifs
Etendre la syntaxe de lua3 colonnes : étendre les propriétés jusqu'en bas !
Etendre une classe pour en faire un singletonPlusieurs JVM pour étendre la mémoire disponible?
[résolu][liste] étendre la surface du lien à tout l'attribut liEtendre bannière
Etendre une ligne...Comment etendre le background d'un <div> jusqu'au footer de ma page ?
Etendre XDoclet pour la génération du BusinessDelegate[CSS] Problème de conteneur qui ne veut pas s'étendre
Plus de sujets relatifs à : Comment étendre HashCodeBuilder et EqualsBuilder


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR