gpt4 book ai didi

java - 如何使用反射访问从抽象类继承的字段?

转载 作者:行者123 更新时间:2023-12-01 07:46:11 25 4
gpt4 key购买 nike

所以我有一个代表 3D 几何形状的抽象 Geo 类,因此它继承了 vector 位置等字段和更新和显示等抽象方法。

由于我的 Cube 类继承自此 Geo 类,因此我没有重新声明我的字段,而只是在 Cube 类的构造函数中设置它们。最初,当我没有从 Geo 继承并在 Cube 类中声明字段时,我没有收到错误。

但是,我注意到当我尝试查看该字段是否存在时,它会抛出此错误:

java.lang.NoSuchFieldException: boundBox

这是检查字段的反射代码(该对象是 Cube 对象):

try {
Field field = object.getClass().getDeclaredField("boundBox");
} catch(Exception e){
e.printStackTrace();
}

所以,我不再重新声明“boundBox”字段,因为我已经在 Geo 抽象类中声明了它。这是我的抽象类和子类的基本部分:

abstract class Geo {
public Vector pos;
public BoundingBox boundBox;

abstract void update();
abstract void display();
}

class Cube extends Geo {
public Cube(Vector pos, float dim){
this.pos = pos;
boundBox = new BoundingBox(pos,dim);
}
@Override
void update(){
}
@Override
void display(){
}
}

最佳答案

使用Class.getField()而不是Class.getDeclaredField()getDeclaredField() 仅考虑由调用该方法的对象类型声明的字段,而 getField() 递归地向上查找匹配的父类(super class)型树。

关于java - 如何使用反射访问从抽象类继承的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51753020/

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