数组中的不同对象

时间:2014-03-18 12:59:19

标签: java arrays object

任何人阅读的好时光,

我想问一下Java中是否有以下情况可以做:

我想做什么 - 创建一个可以包含不同对象的二维数组(即在[0] [2]中我希望在[0] [3] - 房间对象中有PreRoom对象)和希望这些对象可以访问(显然)。

我是怎么做到的?

1)声明对象类型的二维数组:

Object[][] map = new Object[151][151];

2)创建一个对象:

map[0][2] = new PreRoom(r, true);

3)但在此之后,我无法使用PreRoom的任何方法/获取其任何属性,即无法执行:

map[0][2].x;
//or
map[0][2].getR;

我这样做错了吗?或者它是不可能的,因此唯一的解决方案是为当前的2创建一个统一的对象?

提前致谢。

编辑:找到解决方案,谢谢回复。

3 个答案:

答案 0 :(得分:1)

您声明Object[][] map = new Object[151][151];因此,您存储在其中的任何内容都将是一个对象(显然),那么它如何知道map[0][2]中的对象是PreRoom?您需要将其强制转换为可以使用PreRoom

的任何方法
((PreRoom)map[0][2]).methodName();

将来如果要在map中存储多种类型,请务必小心。如果您需要迭代地图而不知道哪些值是什么,您可能会发现instanceof非常有用。

例如;

if(map[x][y] instanceof PreRoom) {
   //map[x][y] is an instance of your PreRoom class
   PreRoom preRoomObj = (PreRoom) map[x][y];
}

答案 1 :(得分:1)

您可以定义将由PreRoom和Room类实现/继承的接口或抽象类。

然后你的数组就像是

<InterfaceName/AbstractClassName>[] = new <InterfaceName/AbstractClassName>[151][151];

您的接口或基类应该声明公共方法和变量。

答案 2 :(得分:0)

在这里,您需要显式地键入强制转换以调用该对象上的方法

((PreRoom)map[0][2]).x