gpt4 book ai didi

Java 反射(reflect)嵌套的匿名类

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:51 26 4
gpt4 key购买 nike

为什么这段代码返回“class java.lang.Object”?

Object a = new Object() {
public Object b = new Object(){
public int c;
};
};

System.out.println(a.getClass().getField("b").getType());

为什么 inner-inner 类型会丢失?如何反射(reflect) c 字段?

编辑:

这个有效(正如一些答案中所指出的):

a.getClass().getField("b").get(a) ...

但是我必须调用一个 getter,有什么方法可以只用反射元数据来反射 c 吗?

最佳答案

因为 b 被声明为 Object:

public Object b = ...;

变量类型(静态类型)和该变量引用的对象类型(运行时类型)之间存在区别。

Field.getType() 返回字段的静态类型。

如果你想获得该字段引用的对象的运行时类型,你需要访问该对象并对其调用 getClass()(因为 a 被声明作为 Object,因此 b 作为其成员不可见,您必须使用反射来访问它):

System.out.println(
a.getClass().getField("b").get(a).getClass());

更新:如果不访问包含它的对象实例,就无法反射(reflect)c。这就是这些类型被称为匿名的原因 - 包含 c 的类型没有名称,因此您不能将字段 b 声明为该类型的字段。

关于Java 反射(reflect)嵌套的匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com