对于我的项目,我需要一个可以容纳多种不同对象类型的二维数组。 java 的问题是它不允许你这样做。您只能拥有特定对象类型的数组。
现在不要误会我的意思,但我做了一些研究,一个建议的解决方案是使用 Object
数组,因为 java 中的每个类默认情况下都会扩展对象类。例如:
Object[][] someArray = new Object[5][5];
someArray[1][2] = new Cat();
someArray[3][4] = new Dog();
这样做的问题是,作为父类(super class)的对象类无法访问扩展它的子类的方法和字段。因此,如果我的猫或狗类中有一个公共(public) eat()
方法,则 someArray
中的元素将无法访问该方法。
所以我现在已经走进了死胡同。任何帮助表示赞赏。提前致谢。
最佳答案
[请不要因为我回答自己的问题而评判我]
一种可能的解决方案是使用 2D ArrayList。 2D 数组的工作方式实际上是由 1D 数组组成的 1D 数组。
也许相同的概念可以应用于 ArrayList,它实际上可以存储任何对象类型,而不会出现可访问性问题。可以按如下方式创建 5x5 ArrayList:
ArrayList<ArrayList> someArray = new ArrayList<ArrayList>();
for(int x=0 ; x<5 ; x++)
{
someArray.add(new ArrayList());
for(int y=0 ; y<5 ; y++)
someArray.get(x).add(null);
}
并将 row 1 col 2 设置为 cat 对象:
someArray.get(1).set(2, new Cat());
someArray.get(3).set(4, new Dog());
所以 2D ArrayLists,虽然有点令人困惑,但可能会非常有效地解决这个问题。
关于java - 多个不同对象的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44535145/