gpt4 book ai didi

Java:所有派生类必须实现的抽象或通用列表

转载 作者:行者123 更新时间:2023-12-01 18:08:20 27 4
gpt4 key购买 nike

我正在用 Java 为游戏引擎制作一个基于组件的系统。

我有不同的系统类来处理不同的事情,例如,PhysicsSystem、RenderSystem、EditorSystem 等等。所有类都继承自 BaseSystem,而 BaseSystem 又实现了接口(interface) ISystem。

我希望所有系统类都有一个 ArrayList,但每个类的类型可能不同,这意味着 RenderSystem 可能有一个 RenderComponent 列表,而PhysicsSystem 则有一个PhysicsBodyComponent 列表。

是否可以在所有派生类随后实现的 BaseSystem 类或 ISystem 接口(interface)中定义通用或抽象列表?我对泛型没什么经验,所以我对此有点困惑。

这是我当前的代码。正如您所看到的,我为派生类创建了第二个列表,这有点浪费。

interface ISystem
{
boolean AddToSystem(Component c);
}

abstract class BaseSystem implements ISystem
{
// can I make this list generic, so it can store any type in derived classes?
// e.g., Component, IRenderable, IPhysics, etc.
protected List<Component> _componentList;
}

class RenderSystem extends BaseSystem
{

// need to make a second list that stores the specific render components
List<IRenderable> _renderList = new ArrayList<IRenderable>();

void Update()
{
for (IRenderable r : _renderList)
r.Render(); // this code is specific to the IRenderable components
}

@Override
public boolean AddToSystem(Component c)
{
boolean succesfullyAdded = false;

if (c instanceof IRenderable)
{
succesfullyAdded = true;
_renderList.add((IRenderable) c);

} else
throw new RuntimeException("ERROR - " + c.Name() + " doesn't implement IRenderable interface!");

return succesfullyAdded;

}
}

最佳答案

当然,假设您的所有组件都实现 IComponent 使用如下内容:

interface ISystem<ComponentType extends IComponent> {
public boolean AddToSystem(ComponentType c);
}

如果您不想有硬类型依赖性,可以删除 extends IComponent,但这会使处理系统列表变得更加困难。

关于Java:所有派生类必须实现的抽象或通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34696983/

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