具有实际运行时类型的getDeclaredFields,用于Unsafe.objectFieldOffset(f)



getDeclaredFields[0]。getType()只返回编译时类信息。我有以下代码,其中java.lang.reflect.Field的类型应为实际类型。此字段被传递给不安全。objectFieldOffset(f)

public class Wrapper {
     public Object field1;
      //getters and setters for field1 and constructor
}
class SomeClass {
}
Wrapper wrapper = new Wrapper();
wrapper.field1 = new SomeClass();
System.out.println(wrapper.getClass().getDeclaredFields[0].getType());

即使对象可以使用wrapper.field1.getClass(),Unsafe.objectFieldOffset(f)也需要Field实例,因此wrapper.getClass().getDeclaredFields[0].getType()需要返回实际类型SomeClass而不是object。有没有什么我可以推翻这种行为?

换言之,是否有将Unsafe.objectFieldOffset(f)与运行时类型信息一起使用?

不幸的是,这是不可能的。getDeclaredFields()正是这样做的——返回带有编译时信息的字段。您必须使用field1.getClass()检索运行时类型。

编辑:您也可以使用wrapper.getType().getDeclaredFields[0].get(wrapper).getClass(); 间接检索类

相关内容

  • 没有找到相关文章

最新更新