2010-12-03 8 views
4

Also im Grunde muss ich eine Vererbungshierarchie manuell anpassen. Ich möchte, dass die Klassen perfekt sind, keine zusätzlichen Felder, und sie sind nur DTOs. Es ist jedoch sehr einfach, verloren zu gehen und doppelte Felder hinzuzufügen, und es ist wirklich schwer zu sehen, ob das, wonach ich suche, schon da ist. Etwas, das ich wirklich gerne hätte, ist eine Möglichkeit, alle Felder innerhalb einer Klasse aufzulisten, einschließlich der vererbten Felder (auch privat). Wie eine abgeflachte Nur-Feld-Ansicht, bei der keine Getter und Setter alles verstopfen.Refactoring verrückte Vererbungshierarchien von Wertobjekten - Wie bekomme ich eine Liste aller Felder und Typen?

Ich habe einen Weg gefunden, um es in Netbeans mit der rechten Maustaste/File-Mitglieder zu zeigen, aber ich kann nicht kopieren und einfügen und speichern Sie es in einer Textdatei oder irgendetwas.

Im Grunde nur diese Spalten:

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

Wer weiß, wie es oder eine bessere Art und Weise zu tun, um zu tun, was ich versuche zu tun?

Antwort

1

Wenn kein vorhandenes Tool gefunden werden kann, sollte es nicht schwer sein, etwas zu schreiben, das Reflektion verwendet, um diese Informationen aus Ihren DTO-Klassen zu extrahieren. Sie müssten das Programm für Updates neu kompilieren und erneut ausführen, aber das ist besser als nichts.

+0

Richtig, ich dachte darüber nach, etwas mit jython zu schreiben. Es ist eines dieser Dinge, die scheinbar einfacher sein sollten als es ist. – gtrak

1

Sie können die "Hierarchieansicht" von Eclipse verwenden. Wenn Sie auf eine Klasse klicken, erhalten Sie ihre Mitglieder. Wenn Sie auf das Symbol "Alle geerbten Elemente anzeigen" klicken, erhalten Sie eine Ansicht, die nach Elementtyp sortiert ist (statische Felder, statische Methoden, Instanzfelder usw.). Sie können die Instanzfelder auf die übliche Weise auswählen, mit der rechten Maustaste klicken und "qualifizierten Namen kopieren". Sie erhalten etwas wie das, das enthält, wo das Mitglied ursprünglich definiert wurde.

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 
... 

In diesem Beispiel ist "originalMatrix" mehrfach definiert. (Es ist sogar noch einfacher, in der Hierarchieansicht zu sehen.)