我正在制作游戏,它使用网格 我可以通过扩展arraylist来实现它 例如:
public class Grid extends ArrayList<ArrayList<obj>>
{
public void addObj(Obj obj ,int x, int y)
{
get(x).set(y,obj);
}
}
或者我应该通过存储来实现它
public class Grid
{
private ArrayList<ArrayList<obj>> objs = new ArrayList<...>();
public void addObj( Obj obj, int x, int y)
{
objs.get(x).set(y,obj);
}
}
帮助PLZ
答案 0 :(得分:3)
后者,构成方法。 ArrayList是您现在选择实现Grid的方式,但您可能希望将来使用Map或其他List类型。
另外,一些ArrayList的方法在Grid的上下文中可能毫无意义,例如:子列表。
答案 1 :(得分:1)
在这种情况下,最好使用组合而不是继承。您只应使您的类从ArrayList
(或Java Collection Framework中的任何其他类)扩展,以防您需要更改该类的特定行为,如add
方法。
顺便说一句,您应该将变量声明为List
而不是ArrayList
。始终面向接口而不是特定的实现类。
代码应如下所示:
public class Grid {
private List<List<obj>> objs = new ArrayList<List<obj>>();
public void addObj( Obj obj, int x, int y) {
objs.get(x).set(y,obj);
}
}
更多信息:
答案 2 :(得分:1)
Grid
是否满足以下要求: Grid-is-a-ArrayList ?我不会说。
在这种情况下,我更愿意使用构图。您的网格将为列表提供完全不同(更丰富?)的界面。
请注意,如果您确实需要List
语义,则可以在java.util.List
上实现接口Grid
,而无需实际继承实现。这将为您提供所需的合同,但将实施留给您(无论您是否选择委托真实的名单......)