在运行时获取字段值

时间:2011-10-13 17:02:59

标签: java reflection runtime field

如何在Runtime for Java中获取该字段的值?

修改

使用这种结构:

    ClassPathScanningCandidateComponentProvider scanner =
 new ClassPathScanningCandidateComponentProvider(
                    false);
        for (BeanDefinition bd : scanner
        .findCandidateComponents("aspectlogging"))
                        {
            Class myTarget = null;
                try {
                        myTarget = Class.forName(bd.getBeanClassName());
                     }
                       catch (ClassNotFoundException e) {...}
                for (Field f:myTarget.getDeclaredFields()){
                        try {
                            System.out.println("FIELD: " + f.get(myTarget));
                            } catch (IllegalArgumentException e) {...} 
                              catch (IllegalAccessException e) {...}
                    } }

我有java.lang.IllegalAccessException,当调用f.get(myTarget)时,其中myTarget是运行时获取的bean实例,f是它的领域。

在循环中运行时:

System.out.println("FIELD: " + f);

让字段名称确定:

FIELD: private java.lang.String aspectlogging.TestableBean.name
FIELD: private java.lang.String aspectlogging.TestableBean.name

很奇怪,这个价值无法获得。

1 个答案:

答案 0 :(得分:1)

argcalled obj in the Javadoc)是要操作的实例。在您的示例中,实例为bd,因此请使用f.getInt(bd)提取int字段,依此类推。