Ist es möglich, eine Schleife durch eine Klasse-Mitglieder in Java?
Frage
Ich habe ein DTO, die eine ganze Reihe von Mitgliedern. Ich frage mich, ob Java die Idee eines für (in) für die Klasse unterstützt. Ich glaube nicht, es funktioniert, aber es würde mir eine Menge Ärger ersparen, wenn es tut, so, ich dachte, ich die Frage werfen würde da draußen.
Lösung
Nun, man kann es mit Reflexion tun:
for (Field field : clazz.getFields())
{
...
}
(oder das Äquivalent für Methoden etc.)
Sie können dann die Feldwerte für eine bestimmte Instanz erhalten, oder statische Werte.
Andere Tipps
Es tut, ist es ein wenig Aufwand aber.
Sie haben Reflexion zu verwenden.
Siehe auch: Class.getDeclaredFieds ()
Gibt ein Array von Feldobjekten reflektiert alle Felder von der Klasse oder Schnittstelle dieses Klasse-Objekt dargestellt wird erklärt
Sie können ein Beispiel finden Sie unter hier
Es gibt drei Möglichkeiten, ein Field-Objekt aus einem Klasse-Objekt zu erhalten.
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) {
}
Sehen Sie die Klasse Klasse Definition für weitere Optionen.
Ja, verwenden Sie das Reflection-API . Insbesondere überprüfen Sie die getFields
und getMethods
Methoden von Class
.
Sie können mit Reflexion alle Mitglieder und Funktionen erhalten.
Vielleicht muss man sich fragen, warum das DTO so viele Mitglieder hat, die Sie denken, dies ist notwendig. Könnte Zeit sein Refactoring.
Werfen Sie einen Blick auf das Spiegelrahmen, wobei Sie die Klasse für diese Informationen introspect kann.
http: / /java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html