Domanda

Ho un DTO che ha un sacco di membri. Mi chiedevo se Java supporta l'idea di un for (in) per la classe. Non credo che lo faccia, ma mi farebbe risparmiare un sacco di dolore se lo facesse, quindi, ho pensato che avrei lanciato la domanda là fuori.

È stato utile?

Soluzione

Bene, puoi farlo con la riflessione:

for (Field field : clazz.getFields())
{
    ...
}

(O l'equivalente per metodi ecc.)

È quindi possibile ottenere i valori dei campi per un'istanza specifica o valori statici.

Altri suggerimenti

Lo fa, anche se un po 'seccante.

Devi usare la riflessione.

Vedi: Class.getDeclaredFieds ()

  

Restituisce una matrice di oggetti Field che riflettono tutti i campi dichiarati dalla classe o dall'interfaccia rappresentata da questo oggetto Class

Puoi vedere un esempio qui

  

Esistono tre modi per ottenere un oggetto Field da un oggetto Class.

 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) {
 }

Vedi la classe Class definizione per più opzioni.

Sì, utilizza API di riflessione . In particolare, controlla i metodi getFields e getMethods da Class .

Puoi usare la riflessione per ottenere tutti i membri e le funzioni.

Forse devi chiederti perché quel DTO ha così tanti membri che pensi che ciò sia necessario. Potrebbe essere il momento di refactoring.

Dai un'occhiata al quadro di riflessione in base al quale puoi introspettare la classe per queste informazioni.

http: / /java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top