私有(private)成员的java反射getFields |动态访问对象名称值

标签 java 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();
            }
}

费率代码.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() 只为您提供公共(public)字段。也许您想要 JavaBean setter/getter ?

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

如果您想访问私有(private)字段,您可以使用 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);
}

关于私有(private)成员的java反射getFields |动态访问对象名称值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936768/

相关文章:

java - Spring Boot,如何在具有 EmbeddedId 的表中插入新记录

Java 数组逆序

java - 将数据从 Bean 传递到 jsf 页面上的 javascript。谷歌 API 说明

java - 退出时如何保存 Activity 的状态?安卓

c# - 分页 API 调用使用 Linq to Sql OrderBy 与字符串参数和反射

java - "generic method""absolute value"java

c# - 列出使用 Mono.Cecil 调用方法的所有引用

c# - 从 IEnumerable<T> 获取类型 T

c# - 当您知道要分配的字段名称时,是否可以将数组分配给未知类型的数组?

inheritance - Haxe 反射 - 子类和接口(interface)