2009-10-30 20 views
8

Tengo un DTO que tiene un montón de miembros. Me preguntaba si Java apoya la idea de un for (in) para la clase. No creo que lo haga, pero me ahorraría un montón de dolor si lo hiciera, así que pensé en arrojar la pregunta por ahí.¿Es posible recorrer los miembros de una clase en java?

+0

¿Qué es un 'DTO'? – CodyBugstein

+1

¿Estás preguntando esto sobre una pregunta que fue respondida hace 3.5 años? Un DTO es un objeto utilizado para representar un conjunto de datos, generalmente asociado con un corolario de tabla de db. Estaba usando aquí con Spring. Supongo que se usa en la mayoría de las situaciones JDBC. –

+0

De hecho, soy :) ¿Qué es 3.5 años en el esquema más grande de las cosas en el ciberespacio atemporal? Gracias por tu respuesta. – CodyBugstein

Respuesta

26

Bueno, puede hacerlo con la reflexión:

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

(O el equivalente para los métodos etc.)

A continuación, puede obtener los valores de los campos para una instancia específica, o valores estáticos.

+0

+1 por concisión. –

+0

muy obligado. Gracias. –

4

Sí, utilice el Reflection API. Particularmente, verifique los métodos getFields y getMethods de Class.

0

Puede usar la reflexión para obtener todos los miembros y funciones.

Quizás deba preguntarse por qué ese DTO tiene tantos miembros que cree que es necesario. Podría ser hora de refactorizar.

7

lo hace, es un poco de molestia sin embargo.

Tienes que usar la reflexión.

Ver: Class.getDeclaredFieds()

Devuelve una matriz de objetos de campo que reflejan todos los campos declarados por la clase o interfaz que representa este objeto Class

Se puede ver un ejemplo here

Hay tres formas de obtener un campo objeto de un objeto de Clase.

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

Véase la definición de clase Class para más opciones.

Cuestiones relacionadas