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()
递归地提升寻找匹配的超类型树.