Ich habe ein DTO, das eine ganze Reihe von Mitgliedern hat. Ich habe mich gefragt, ob Java die Idee von einem (in) für die Klasse unterstützt. Ich glaube nicht, dass es das tut, aber es würde mir eine Menge Leid ersparen, wenn es so wäre, also dachte ich mir, ich würde die Frage dort rauswerfen.Ist es möglich, eine Klassenmitglieder in Java zu durchlaufen?
Antwort
Nun, man kann es mit Reflexion tun:
for (Field field : clazz.getFields())
{
...
}
(oder das Äquivalent für Methoden etc.)
Anschließend können Sie die Feldwerte für eine bestimmte Instanz oder statische Werte erhalten.
+1 für Prägnanz. –
viel verpflichtet. Vielen Dank. –
Ja, verwenden Sie die Reflection API. Überprüfen Sie insbesondere die Methoden getFields
und getMethods
von Class
.
Sie können Reflektion verwenden, um alle Mitglieder und Funktionen zu erhalten.
Vielleicht müssen Sie sich fragen, warum dieses DTO so viele Mitglieder hat, dass Sie das für notwendig halten. Könnte Zeit sein, um zu refaktorieren.
Sehen Sie sich den Reflexionsrahmen an, in dem Sie die Klasse nach diesen Informationen durchsuchen können.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html
Es tut, ist es aber ein bisschen Ärger.
Sie müssen Reflexion verwenden.
Gibt ein Array von Feldobjekten reflektiert alle von der Klasse oder Schnittstelle dieses Klasse-Objekt dargestellt wird erklärt Felder
können Sie ein Beispiel sehen here
Es gibt drei Möglichkeiten, ein Feld zu erhalten Objekt von einem Klassenobjekt.
Class cls = java.awt.Point.class;
// By obtaining a list of all declared fields.
Field[] fields = cls.getDeclaredFields();
// By obtaining a list of all public fields,
// both declared and inherited.
fields = cls.getFields();
for (int i=0; i<fields.length; i++) {
Class type = fields[i].getType();
process(fields[i]);
}
// By obtaining a particular Field object.
// This example retrieves java.awt.Point.x.
try {
Field field = cls.getField("x");
process(field);
} catch (NoSuchFieldException e) {
}
Siehe Class Klassendefinition für weitere Optionen.
Was ist ein 'DTO'? – CodyBugstein
Sie fragen dies auf eine Frage, die vor 3,5 Jahren beantwortet wurde ?! Ein DTO ist ein Objekt, das zur Darstellung eines Datensatzes verwendet wird, der normalerweise mit einer logischen Db-Tabelle verknüpft ist. Ich habe hier mit Spring gebraucht. Ich nehme an, dass es in den meisten JDBC-Situationen verwendet wird. –
In der Tat bin ich :) Was ist 3,5 Jahre im größeren Schema der Dinge im zeitlosen Cyberspace? Danke für deine Antwort. – CodyBugstein