私有成员的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