如何使用反射获得字段的值?

时间:2018-05-17 03:55:48

标签: java reflection

我正在编写一个hibernate监听器,它将在传递给db之前和之后执行一些操作。我必须使用反射得到一个字段的值。我写了一个示例代码来演示我的问题。

public class Test {

FileAttachment  attachment = new FileAttachment();

public Test() {
    attachment.setData(new byte[1]);
}


void test() throws Exception{
    for(Field field :attachment.getClass().getDeclaredFields()) {
        if ((CloudPersistable.class).isAssignableFrom(field.getType())) {


            System.out.println("BOom");

            Class<?> x = Class.forName(attachment.getClass().getCanonicalName());
            Field f = x.getDeclaredField("data");
            f.setAccessible(true);

            CloudPersistable attachment = (CloudPersistable) f.get(f.getClass());
            System.out.println(attachment);

        }
    }


}

public static void main(String[] args)throws Exception {
     new Test().test();;


}

}

**请帮助解决线CloudPersistable attachment =(CloudPersistable)f.get(f.getClass());

提前致谢.. !!!

1 个答案:

答案 0 :(得分:1)

您需要用于读取字段值的对象。所以,如果你要读这样的值:

this.attachment.data

使用反射,你会这样做:

field.get(this.attachment);

请注意:只需键入Attachment.class即可获取已知类的类对象,以便将循环声明为:

for(Field field : Attachment.class.getDeclaredFields())

这清楚表明它与读取的完全相同的类(不是可能不同的运行时类)。