我正在编写一个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());
提前致谢.. !!!
答案 0 :(得分:1)
您需要用于读取字段值的对象。所以,如果你要读这样的值:
this.attachment.data
使用反射,你会这样做:
field.get(this.attachment);
请注意:只需键入Attachment.class
即可获取已知类的类对象,以便将循环声明为:
for(Field field : Attachment.class.getDeclaredFields())
这清楚表明它与读取的完全相同的类(不是可能不同的运行时类)。