(This问题是与我相似,但我认为他们是足够的不同,我可以创造一个新的)。获取子类的实例
基本上在我小的3D游戏我所有的实体是由许多不同的组件,一个用于纹理,一个用于移动等,这些子组件从界面“组件”继承。到目前为止,我已经使用过这种方法;
public MovementComponent getMovementComponent() {
for (Component c : components) {
if (c instanceof MovementComponent)
return (MovementComponent) c;
}
return null;
}
获取某个组件的实例。但是现在我希望将其更改为更通用的方法,可以从我的组件列表中获取任何类型的组件。我测试了这样的事情;
public Component getComponentType(Class component) {
for (Component c : components) {
if (c.getClass() == component)
return c.getClass().cast(c);
}
return null;
}
但是,即使我把结果这总是返回界面的“”“实例”,“”,从来没有一个子组件的实例,这意味着我仍然有它转换为相应的类型。基本上我希望有一种方法可以:
- 迭代通过集合。
- 找到一个特定的子类。
- 返回该子类的实例。
我觉得我在这里的正确轨道,但我无法得到它的工作。感谢您的回应和反馈。
工程很棒。但是Eclipse给了我一个警告,说这是一个未经检查的转换 - 这是什么意思,这是我应该处理的事情(如果是这样,怎么办?取消警告?)? – Charanor
警告是由于不安全的类型转换造成的。请参阅我的答案以获得更好的解决方案 - 方法标头相同,但使用“cast”方法完成演员。 – Marwin
@Charanor未检查转换警告显示,因为编译器不知道你执行==检查。但既然你这样做,铸造是绝对安全的,你可以忽略它@SupressWarning(“未选中”)方法注释 – AdamSkywalker