This question already has answers here:
Finding the specific type held in an ArrayList<Object> (ie. Object = String, etc.)
(2个答案)
4年前关闭。
我正在用Java(使用LibGDX)为游戏引擎编写Entity Component System。
我有一个带有各种组件的arraylist的实体。每个组件都从基本Component类继承。
我想在我的实体上有一个方法,可以给我引用特定类型的组件(例如,RenderComponent,PhysicsComponent等)。我已经尝试了以下方法,但是它似乎不起作用。
返回的对象为null。
我应该怎么做?有没有更聪明的方法可以使参数指定类型(而不是简单的字符串)?
另外,如果我需要特定类型的所有组件怎么办?我该如何处理?
我读了一些有关反射的内容,但是我从未使用过它。我对Java编程还是很陌生。
提前致谢。
您可以这样调用方法:
并获取列表:
(2个答案)
4年前关闭。
我正在用Java(使用LibGDX)为游戏引擎编写Entity Component System。
我有一个带有各种组件的arraylist的实体。每个组件都从基本Component类继承。
我想在我的实体上有一个方法,可以给我引用特定类型的组件(例如,RenderComponent,PhysicsComponent等)。我已经尝试了以下方法,但是它似乎不起作用。
public class Entity
{
private ArrayList<Component> _components;
...
public void AddComponent(Component c)
{
_components.add(c);
c.Enable();
}
public Component GetComponent(String componentType)
{
Component s = null;
for (int i = 0; i < _components.size(); i++)
{
if (_components.get(i).getClass().getSimpleName() == componentType)
s = _components.get(i);
}
return s;
}
}
返回的对象为null。
我应该怎么做?有没有更聪明的方法可以使参数指定类型(而不是简单的字符串)?
另外,如果我需要特定类型的所有组件怎么办?我该如何处理?
我读了一些有关反射的内容,但是我从未使用过它。我对Java编程还是很陌生。
提前致谢。
最佳答案
尝试这个
public class Entity
{
private ArrayList<Component> _components;
...
public void addComponent(Component c)
{
_components.add(c);
c.Enable();
}
public Component getComponent(Class componentClass)
{
for (Component c : _components)
{
if (c.getClass() == componentClass)
return c;
}
return null;
}
}
您可以这样调用方法:
getComponent(PhysicsComponent.class)
并获取列表:
public List<Component> getAllComponents(Class componentClass)
{
List<Component> components = new ArrayList<Component>();
for (Component c : _components)
{
if (c.getClass() == componentClass)
components.add(c);
}
return components;
}
10-06 04:08