This question already has answers here:
Reflection generic get field value
                            
                                (7个答案)
                            
                    
                2年前关闭。
        

    

我正在编写一个休眠监听器,它将在传递给数据库之前和之后进行一些操作。我必须使用反射获取字段的值。我已经编写了示例代码来演示我的问题。

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附件=(CloudPersistable)f.get(f.getClass());

提前致谢..!!!

最佳答案

您需要在其上读取字段值的对象。因此,如果要读取这样的值:

this.attachment.data


使用反射,您将执行以下操作:

field.get(this.attachment);


附带说明:您可以通过键入Attachment.class来获取已知类的类对象,从而将循环声明为:

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


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

09-28 14:29