私有成员的javareflectiongetFields | 动态访问对象名称值

我想打印所有类的属性及其名称和值。 我使用了reflection,但getFields给我的长度为0。

 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; 

Class.getFields()仅为您提供公共字段。 也许你想要JavaBean的getter?

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

如果要访问私有字段,可以在使用之前使用getDeclaredFields()并调用field.setAccessible(true)。

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

getFields仅返回公共字段。 如果您想要所有字段,请参阅getDeclaredFields