2010-03-29 5 views
8

Je crois avoir lu quelque part des personnes générant des méthodes equals/hashcode/toString pendant la compilation (en utilisant APT) en identifiant les champs qui devraient faire partie du test de hachage/égalité. Je ne pouvais pas trouver quelque chose comme ça sur le web (je pourrais avoir rêvé?) ...Générer equals/hashcode/toString en utilisant l'annotation

Cela pourrait se faire comme ça:

public class Person { 
    @Id @GeneratedValue private Integer id; 

    @Identity private String firstName, lastName; 
    @Identity private Date dateOfBirth; 

    //... 
} 

Pour une entité (si nous voulons certains à exclure Effectuer champs, comme l'ID).

Ou comme une classe de cas scala-à-dire un objet de valeur:

@ValueObject 
public class Color { 
    private int red, green, blue; 
} 

Non seulement le fichier devient plus lisible et plus facile à écrire, mais il contribue également à faire en sorte que tous les attributs font partie des Egaux/hashcode (au cas où vous ajouteriez un autre attribut plus tard, sans mettre à jour les méthodes en conséquence). J'ai entendu APT n'est pas très bien pris en charge dans IDE mais je ne verrais pas cela comme un problème majeur. Après tout, les tests sont principalement effectués par des serveurs d'intégration continue.

Une idée si cela a déjà été fait et sinon pourquoi? Merci

Répondre

2

Alors que Pojomatic ne fait pas de manipulation de bytecode à la compilation, il supporte la création facile des méthodes equals, hashCode et toString, en utilisant des annotations pour personnaliser leur comportement.

+1

Approche intéressante. Je me demande quel est l'impact sur les performances. –

Questions connexes