创建扩展公共基础的类的数组

时间:2018-12-02 19:30:37

标签: java arrays arraylist

我有很多类,所有这些类都扩展了EntityManagerSystem()类。

public class EntityManagerSystem
{
   public void init() {}
   public void update() {}
   public void free() {}
   public void reset() {}
}

public class AsteroidManager extends EntityManagerSystem...
public class TeleportManager extends EntityManagerSystem...

and so on.

我想创建一个包含这些类的Array <>(),以便在其中轻松调用init(),update()和free()方法。

声明此数组的最佳方法是什么。我不想声明[]数组,因为这些类的构造函数具有参数,而且我需要能够添加和删除条目的灵活性。

我认为类似Array<>() managerList...,但是我不确定声明是否正确。

(顺便说一下,我正在使用LibGdx ...)

我看过一些帖子,它们解决了相似个问题,但它们并没有真正提供我需要的答案。

TIA

3 个答案:

答案 0 :(得分:0)

您可以列出一个列表

List<EntityManagerSystem> myList = new LinkedList<>();

然后将您的对象添加到其中

myList.add(new AsteroidManager(...));

myList.add(new TeleportManager(...));

或者如果您坚持使用数组,它也可以像这样工作:

EntityManagerSystem[] myThingies = new EntityManagerSystem[]{ new AsteroidManager(...), new TeleportManager(...) }

答案 1 :(得分:0)

  

我不想声明[]数组,因为这些类的构造函数具有参数

构造函数是否具有参数无关紧要。您可以通过指定类型来声明数组,而不是通过指定构造函数来声明数组-这是没有道理的。

  

另外,我需要能够添加和删除条目的灵活性。

然后,您需要一个诸如ArrayList<EntityManagerSystem>之类的集合类,而不是[]数组。

答案 2 :(得分:0)

您必须声明所需对象的列表:List<EntityManagerSystem> instances = new ArrayList<>()。它也可以是静态的。然后您有两个选择:

首先。创建后手动将EntityManagerSystem的新实例添加到此列表中:

AsteroidManager asteroidManager = new AsteroidManager();
TeleportManager teleportManager = new TeleportManager();
instances.add(asteroidManager);
instances.add(teleportManager);

第二您可以在基类的构造函数中实现:

abstract class EntityManagerSystem {

    protected EntityManagerSystem() {
        instances.add(this);
    }
}