java—对一组类使用ArrayList的更有效的方法?

xmq68pz9  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(298)

我有一堆不同的敌人职业,它们的移动和行为是不同的,通常屏幕上会产生多个敌人职业的示例,因为它们基本上都是随机的,所以我需要使用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的不同示例?或者别的什么,只是为了不让我的代码里有10亿个数组列表?
附加信息:我使用java处理库来做这个,不确定它是否改变了什么。
对不起,如果答案对你来说是显而易见的,请不要粗鲁。

r8xiu3jd

r8xiu3jd1#

您可以定义 Enemy 具有所需方法的超类as(抽象或不抽象),并扩展所有其他 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());
}
ntjbwcob

ntjbwcob2#

你所有的 EnemyX 类必须从一个接口或抽象类继承,然后可以使用 List<Enemy> 可以容纳任何 EnemyX 对象

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());

相关问题