2010-12-03 3 views
4

Donc, fondamentalement, j'ai besoin d'ajuster manuellement une hiérarchie d'héritage. Je voudrais que les cours soient parfaits, pas de champs supplémentaires, et ils ne sont que des DTO. Cependant, il est vraiment facile de se perdre et d'ajouter des champs en double, et il est vraiment difficile de voir si ce que je cherche est déjà là. Quelque chose que j'aimerais vraiment avoir est un moyen de lister tous les champs dans une classe, y compris ses champs hérités (privé aussi). Comme une vue de champ-aplatie seulement avec des getters et des setters encombrant tout.Refactoring des hiérarchies d'héritage fous d'objets de valeur - Comment obtenir une liste de tous les champs et types?

J'ai trouvé un moyen de l'afficher dans netbeans avec les membres de clic droit/fichier, mais je ne peux pas copier-coller et l'enregistrer dans un fichier texte ou quoi que ce soit.

Fondamentalement seulement ces colonnes:

Name  Type   Superclass 
id  int 
theDate java.util.Date com.something.AbstractDTO 
... 

Quelqu'un sait comment le faire, ou une meilleure façon de faire ce que je suis en train de faire?

Répondre

1

Si aucun outil préexistant ne peut être trouvé, il ne devrait pas être difficile d'écrire quelque chose qui utilise la réflexion pour extraire cette information de vos classes DTO. Vous devrez recompiler et relancer le programme pour les mises à jour, mais c'est mieux que rien.

+0

À droite, je pensais à écrire quelque chose avec jython. C'est une de ces choses qui semble être plus facile que ça ne l'est. – gtrak

1

Vous pouvez utiliser la "Vue hiérarchique" d'Eclipse. Lorsque vous cliquez sur un cours, vous obtenez ses membres. Cliquez sur l'icône "Afficher tous les membres hérités" pour afficher une vue triée par type de membre (champs statiques, méthodes statiques, champs d'instance, etc.). Vous pouvez sélectionner les champs d'instance de la manière habituelle, faire un clic droit et "copier un nom qualifié". Vous obtiendrez quelque chose comme ceci, qui comprend où le membre a été défini à l'origine.

nz.ac.vuw.ecs.kcassell.cluster.MatrixBasedAgglomerativeClusterer.distanceMatrix 
nz.ac.vuw.ecs.kcassell.cluster.MatrixBasedAgglomerativeClusterer.originalMatrix 
nz.ac.vuw.ecs.kcassell.cluster.DisjointClusterer.originalMatrix 
nz.ac.vuw.ecs.kcassell.cluster.DisjointClusterer.originalSeed1 
nz.ac.vuw.ecs.kcassell.cluster.DisjointClusterer.originalSeed2 
nz.ac.vuw.ecs.kcassell.cluster.MatrixBasedAgglomerativeClusterer.previousIteration 
... 

Dans cet exemple, "originalMatrix" est défini plusieurs fois. (C'est encore plus facile à voir dans la vue hiérarchique.)

Questions connexes