任何人阅读的好时光,
我想问一下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创建一个统一的对象?
提前致谢。
编辑:找到解决方案,谢谢回复。
答案 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