【发布时间】:2018-05-17 03:55:47
【问题描述】:
我正在编写一个休眠侦听器,它将在传递给数据库之前和之后执行一些操作。我必须使用反射来获取字段的值。我写了一个示例代码来演示我的问题。
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());
提前谢谢..!!!
【问题讨论】:
-
你必须传递给 f.get 你想要检索字段值的对象,而不是它的类
-
特别看看stackoverflow.com/a/38736542/1531124。除此之外:真的真的不要试图通过快速阅读其 API 来学习反射。阅读一本很好的教程/书籍。这是很复杂的事情,每一个的细节都很重要。有无数种方法可以让反射出错,直到运行时你才注意到。因此:不要实验。研究如何正确地做,并按照工作示例,一步一步,一个字符一个字符!
标签: java reflection