2009-10-30 6 views
8

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?

+0

Was ist ein 'DTO'? – CodyBugstein

+1

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

+0

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

Antwort

26

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.

+0

+1 für Prägnanz. –

+0

viel verpflichtet. Vielen Dank. –

4

Ja, verwenden Sie die Reflection API. Überprüfen Sie insbesondere die Methoden getFields und getMethods von Class.

0

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.

7

Es tut, ist es aber ein bisschen Ärger.

Sie müssen Reflexion verwenden.

See: Class.getDeclaredFieds()

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.