Java:如何检索数组列表中的特定类型?

标签 java arraylist types type-conversion game-engine

<分区>

我正在用 Java(使用 LibGDX)为游戏引擎编写 Entity Component System

我有一个包含各种组件的数组列表的实体。每个组件都继承自一个 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;
    }
}

返回的对象为空。

我应该怎么做?有没有更聪明的方法让参数指定一个类型(而不是简单的字符串)?

此外,如果我想要特定类型的所有组件怎么办?我该如何处理?

我读过一些关于反射的内容,但我从未使用过它。我对 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;
    }

关于Java:如何检索数组列表中的特定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485007/

相关文章:

c++ - C++ 中的设置数组

java - 如何在maven项目中包含共享对象文件

java - 无法在签名的 apk 中登录 Facebook?

java - Arraylist和JTextArea显示问题

java - 计算 ArrayList 分成组的出现次数

php - 如何获取字符串中值的真实类型?

从同步块(synchronized block)调用 wait 时出现 java.lang.IllegalMonitorStateException

Javascript - 在两个日期对象之间创建数组

java - 将结果集中的对象添加到数组列表

scala - 获取 "most specific"输入类型