2011-05-09 27 views
10

Quiero imprimir todas las propiedades de la clase con sus nombres y valores. He utilizado la reflexión, pero getFields dame longitud de 0.reflexión de java getFields para miembro privado | acceder al valor del nombre del objeto dinámicamente

RateCode getMaxRateCode = instance.getID(Integer.parseInt((HibernateUtil 
      .currentSession().createSQLQuery("select max(id) from ratecodes") 
      .list().get(0).toString()))); 
for (Field f : getMaxRateCode.getClass().getFields()) { 
      try { 
       System.out.println(f.getGenericType() + " " + f.getName() + " = " 
         + f.get(getMaxRateCode)); 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
} 

RateCode.java

private Integer rateCodeId; 
    private String code;  
    private BigDecimal childStay;  
    private DateTime bookingTo; 
    private Short minPerson;  
    private Boolean isFreeNightCumulative = false; 
    private boolean flat = false; 
    private Timestamp modifyTime; 
+1

¿Cómo se ve su 'RateCode'? – asgs

+0

allí tienes. Ninguno de sus campos es 'público'. Ver la respuesta de @Peter. – asgs

Respuesta

19

Class.getFields() sólo le da campos públicos. Tal vez querías los get get de JavaBean?

BeanInfo info = Introspector.getBeanInfo(getMaxRateCode.getClass()); 
for (PropertyDescriptor pd : info.getPropertyDescriptors()) 
    System.out.println(pd.getName()+": "+pd.getReadMethod().invoke(getMaxRateCode)); 

Si desea acceder a los campos privados, puede utilizar getDeclaredFields() y llamar field.setAccessible (verdadero) antes de usarlos.

for (Field f : getMaxRateCode.getClass().getDeclaredFields()) { 
    f.setAccessible(true); 
    Object o; 
    try { 
     o = f.get(getMaxRateCode); 
    } catch (Exception e) { 
     o = e; 
    } 
    System.out.println(f.getGenericType() + " " + f.getName() + " = " + o); 
} 
+0

sí, todo el campo tiene acceso privado. –

+0

El uso de propiedades dará acceso a cualquier getters público. Si desea ver los campos subyacentes, la mejor manera sería usar el depurador de su IDE y colocar un punto de interrupción donde tenga el resultado. –

+0

está bien con IDE, pero quiero imprimir esto y tengo getter/setter como ya dijo. Gracias, por ejemplo. –

13

getFields sólo se devuelve campos públicos. Si desea todos los campos, consulte getDeclaredFields

+1

e incluso heredados http://stackoverflow.com/a/2405757/1422630 –

+0

Todas las respuestas deben verse así. :RE – milosmns

Cuestiones relacionadas