17 votes

Comment personnaliser hashCode() et equals() générés par Eclipse ?

Il est recommandé, et parfois nécessaire, que les classes qui représentent des valeurs ( classes de valeurs ) pour remplacer le hashCode() , equals() [et éventuellement toString() Les méthodes [ ]. Les valeurs renvoyées par ces méthodes dépendent de l'ensemble ou d'un sous-ensemble des variables membres de la classe et de sa super-classe. Pour les mettre en œuvre correctement, vous devez connaître un peu de théorie sur hachage et un peu d'algèbre et de théorie des ensembles (pas trop, et presque tout est expliqué dans le manuel). javadocs pour ces méthodes et dans Effective Java form Josh Bloch).
Dans la plupart des cas, la mise en œuvre de ces méthodes suit un modèle, et les IDE (comme Eclipse JDT) comprennent des outils pour les générer. Cependant, les générateurs d'outils ne peuvent pas faire d'hypothèses et génèrent ces méthodes en utilisant uniquement les constructions disponibles dans le langage et la bibliothèque standard. C'est pourquoi ces méthodes sont généralement très laides.

Une autre façon de mettre en œuvre ces méthodes est d'utiliser une bibliothèque comme celle d'Apache (commons-lang) HashCodeBuilder , EqualsBuilder y ToStringBuilder . Grâce à ces utilitaires, il est possible de mettre en œuvre son propre système d'information. hashCode() y equals() qui sont beaucoup plus efficaces.

Ma question porte sur la combinaison de ces deux approches. J'aimerais pouvoir personnaliser l'interface utilisateur d'Eclipse. hashCode() y equals() ce qui les génère en utilisant HashCodeBuilder et ses amis. Est-il possible (et comment) de le faire sans modifier le JDT ? Il suffit d'écrire un petit plugin qui remplacera les implémentations par défaut (mais sans modifier le code de la JDT).

Merci.

5voto

Nathan Ryan Points 5623

Je poste mon commentaire en tant que réponse à la demande : Commonclipse un plugin Eclipse qui facilite l'utilisation d'Apache Commons, fait ce que vous voulez faire.

Avertissement : je n'ai pas d'expérience récente avec ce plugin, c'est pourquoi j'ai initialement posté un commentaire et non une réponse.

2voto

Heathen Points 340

Dans les préférences d'Eclipse (Window>Preferences), allez dans Java > Editor > Templates.

Vous pouvez y créer une plaque avec nom:hashcode contexte:java description:Créer une méthode hashcode. Le modèle devrait contenir quelque chose comme ceci :

public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
}

Sauvegardez et retournez à votre classe de Java. Tapez le nom (hashcode) et appuyez sur ctrl enter. Vous pouvez alors sélectionner votre modèle dans la liste déroulante.

Procédez de la même manière pour chaque méthode souhaitée. Vous pouvez également créer un modèle qui combine toutes les méthodes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X