gpt4 book ai didi

java - 如何在运行时通过反射获取字段类型?

转载 作者:行者123 更新时间:2023-12-02 09:02:47 27 4
gpt4 key购买 nike

如何在运行时通过反射获取测试方法中基类的类类型(A1或A2)?我试过this.getClass().getField("base").getType();但是 getType 返回声明的类型,有什么方法可以做到这一点吗?

提前致谢!

public class Base{

}

public class A1 extends Base{

}

public class A2 extends Base{

}

public abstract class Cmd{
public Base base;
public void test(){
this.getClass().getField("base").getType();
}

}

public class Cmd1 extends Cmd{
public Cmd1(Base base){
this.base = base;

}
}


public class Cmd2 extends Cmd{
public Cmd2(Base base){
this.base = base;
}
}

Base testBase = new A1();
Cmd myCmd = new Cmd1(testBase);

最佳答案

你想要的东西是完全不可能的。

this.getClass() 将引用代表您的 Cmd1 类或 Cmd2 类的对象。然而,无论哪种情况,名称 base 引用的实际字段都是 public Base base; 字段。该FIELD的类型是Base,因为……嗯,它就在那里。它不会仅仅因为这个类被子类化而神奇地改变。反射代表您键入的类,而不是它的任何特定实例。

一旦您谈论的是 Cmd1Cmd2 的特定实例(您就是这样的),因为存在 this 引用,您可以只需取消引用您的字段并检查实际存在的内容:this.base.getClass()。当然,如果 this.base 为 null,则不起作用,这就是要点:基字段可以引用类型为 Base 或其任何子类型的任何实例,但目前它没有引用任何内容,因此无法回答“您所引用的事物的具体类型是什么”的问题。

关于java - 如何在运行时通过反射获取字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60040198/

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