我在使用Java中的类时遇到麻烦,我正在制作一个像这样使用HashMap的组件系统
private final Map<Class<? extends Component>, Component> components = new HashMap<>();
Component是所有组件的基本类型,我创建了一个名为Material的抽象类,它是Component的扩展。
public abstract class Material extends Component
这迫使我将其扩展到其他地方以使用它,例如,我制作了TerrainMaterial
public class TerrainMaterial extends Material
我通过以下方法添加组件
public <T extends Component> T addComponent(T component) {
if (containsComponent(component.getClass())) return null;
components.put(component.getClass(), component);
return component;
}
在我的渲染类中,它返回此HashMap尝试获取材质类型。
entity.getComponent(Material.class);
内部调用此方法,containsComponent方法是一个完成containsKey检查
public <T extends Component> T getComponent(Class<T> component) {
if (!containsComponent(component)) return null;
return component.cast(components.get(component));
}
尝试返回该值时会出现问题,因为TerrainMaterial具有TerrainMaterial的类类型,而不是Material未能找到它的材料,我该如何使用Terrain.class来使此返回TerrainMaterial。
请注意,我已经尝试过像这样添加组件并进行铸造,并且没有任何更改。
terrainEntity.<Material>addComponent(new TerrainMaterial(...));
预先感谢
答案 0 :(得分:1)
向addComponent添加参数以传递类:
public <T extends Component> T addComponent(Class<T> clazz, T component) {
if (containsComponent(clazz)) return null;
components.put(clazz, component);
return component;
}