【问题标题】:A more efficient way to using ArrayLists for a set of classes?将 ArrayLists 用于一组类的更有效方法?
【发布时间】:2020-11-28 15:16:35
【问题描述】:

我有一堆不同的敌人类,它们的移动和行为都不同,并且通常在屏幕上生成多个它们的实例,因为它们基本上都是随机的,所以我需要使用 ArrayList 以便我可以控制行为每个单独的敌人类别。

但是,这给我留下了一堆这样的 ArrayList:

//Example:
ArrayList<Enemy1> enemies = new ArrayList<Enemy1>();
ArrayList<Enemy2> enemies = new ArrayList<Enemy2>();
ArrayList<Enemy3> enemies = new ArrayList<Enemy3>();
ArrayList<Enemy4> enemies = new ArrayList<Enemy4>();
ArrayList<Enemy5> enemies = new ArrayList<Enemy5>();

有没有办法改变 ArrayList 将存储的数据类型,以便我可以清空并重新使用同一个 ArrayList 的不同实例?或者其他什么,这样我的代码中就不必有十亿个 ArrayList?

附加信息: 我正在使用 Java 处理库执行此操作,不确定它是否会改变任何内容。

对不起,如果答案对你来说太明显了,请不要无礼。

【问题讨论】:

  • 你考虑过使用泛型吗?我的意思是做一些事情,比如ArrayList&lt;?&gt; enemies = new ArrayList&lt;?&gt;();。更多信息:informit.com/articles/article.aspx?p=1021579&seqNum=3
  • 谢谢,这正是我需要的!
  • 你的Enemy 类结构是什么? Enemy1Enemy2Enemy3 等是否继承自 Enemy 类?如果是这样,ArrayList&lt;Enemy&gt; 会起作用吗?

标签: java arrays arraylist processing


【解决方案1】:

您的所有EnemyX 类必须从一个接口或抽象类继承,然后您可以使用可以容纳任何EnemyX 对象的List&lt;Enemy&gt;

Interface Enemy{}

Class Enemy1 implements Enemy{}
Class Enemy2 implements Enemy{}
Class Enemy3 implements Enemy{}

使用

List<Enemy> l = new ArrayList<>();
l.add(new Enemy1());
l.add(new Enemy2());
l.add(new Enemy3());

【讨论】:

    【解决方案2】:

    您可以使用所需的方法将Enemy 超类定义为(抽象或不带抽象)并从中扩展所有其他Enemy... 类,然后从超类访问子类:

    public class Enemy { }
    
    public abstract class Enemy { }
    
    class Enemy1 extends Enemy { }
    class Enemy2 extends Enemy { }
    class Enemy3 extends Enemy { }
    class Enemy4 extends Enemy { }
    
    public static void main(String[] args) {
        List<Enemy> l = new ArrayList<>();
        l.add(new Enemy1());
        l.add(new Enemy2());
        l.add(new Enemy3());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多