This question already has answers here:
Reflection generic get field value
(7个答案)
2年前关闭。
我正在编写一个休眠监听器,它将在传递给数据库之前和之后进行一些操作。我必须使用反射获取字段的值。我已经编写了示例代码来演示我的问题。
**请协助解决CloudPersistable附件=(CloudPersistable)f.get(f.getClass());
提前致谢..!!!
使用反射,您将执行以下操作:
附带说明:您可以通过键入
这清楚表明它是正在读取的完全相同的类(而不是可能不同的运行时类)。
(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