我对Java很新,我试图为我的一个班级制作一个基于文本的游戏。 我所知道的是,当你制作一个二维数组时,它的内容必须是它的日期类型。比如,Int [] [] array = new int [3] [3]。有了这个,我只能在这个2D数组中存储整数。但是,我想为我的游戏制作瓷砖/地图。我想生成不同类型的对象并将它们存储在2D数组中,以便我可以拥有我的游戏地图。例如,我想在第1行第8列中存储Cat对象,然后,我想在第1行第2列等中存储Food对象......
我试过这样做, 为简单起见,它只是一个伪代码。
Object[][] objectlist = new Object[6][10];
objectlist[0][8] = new Cat("Black");
objectlist[0][2] = new Food("Tuna");
然后每当我调用类方法时都会这样。
System.out.println(objectlist[0][8].getColor());
System.out.println(objectlist[0][2].getFood());
所以是的,请原谅我,如果这太基础,但就像我说的,我是java的新手。 无论如何,最初这是我想到的,如果我制作地图/瓷砖。 如果有任何其他方法来处理这个或另一个替代方案,我很乐意听到你的声音。
答案 0 :(得分:1)
由于您需要为此2D数组中表示的每个实体使用泛型类型的对象,因此您可以像使用一样使用Object。但这意味着,你必须在每次需要时为你的班级特定属性投射。
我宁愿说如果对象存储在同一个数组中,如果它们有一些共同的行为,为什么不使用接口。
public interface Entity {
public String behavior();
}
public class Cat implements Entity{
public String getColor() {
// something to do
}
public String behavior() {
getColor();
}
}
public class Food implements Entity{
public String getFood() {
// something to do
}
public String behavior() {
getFood();
}
}
然后您可以将数组定义为
Entity entities[][] = new Entity[6][10];
entities[0][2] = new Food();
entities[0][8] = new Cat();
然后将其打印出来
System.out.println(entities[0][2].behavior());
System.out.println(entities[0][8].behavior());
不需要强制转换,也无需知道需要为每个对象调用哪种方法。
答案 1 :(得分:0)
getColor()
或getFood()
方法不属于Object
类,因此您需要向下转发
根据您的对象和使用方法进行投射
System.out.println(((Cat)objectlist[0][8]).getColor());
System.out.println(((Food)objectlist[0][2]).getFood());
您可以使用instanceof
运算符来测试对象是否是指定类型的实例(类或子类或接口)。
答案 2 :(得分:0)
需要转换为正确的类对象。最好在演员之前检查对象是否是该类的实例。
if (objectlist[0][8] instanceof Cat) {
System.out.println(((Cat)objectlist[0][8]).getColor());
}