如何使用Reflection访问从抽象类继承的字段?

kar*_*ros 0 java reflection field abstract

所以我有一个抽象的Geo类来表示3D几何形状,所以它继承了诸如Vector位置和抽象方法之类的字段,比如更新和显示.

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

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

java.lang.NoSuchFieldException: boundBox
Run Code Online (Sandbox Code Playgroud)

这是用于检查字段的Reflection代码(对象是Cube对象):

try {
   Field field = object.getClass().getDeclaredField("boundBox");
} catch(Exception e){
   e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

所以,我不再重新声明"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(){
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

使用Class.getField()而不是Class.getDeclaredField().getDeclaredField()仅考虑由调用该方法的对象的类型声明的字段,同时getField()递归地提升寻找匹配的超类型树.