java - 多个不同对象的二维数组

标签 java arrays

对于我的项目,我需要一个可以容纳多种不同对象类型的二维数组。 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/

相关文章:

java - java 计算器中的按钮无法正常工作

java - Java 和 C++ 中的迭代器有什么区别?

父类(super class)中的java静态工厂

java - Unix 上 Java 中不区分大小写的目录访问

python - 创建多维零点 Python

arrays - 添加不同类型的数组

java - 比较 Oracle PACKAGE 中的日期类型不起作用

javascript - 从数组中的所有 javascript 对象添加特定属性的值

objective-c - NSArrayController 与 NSMutableArray - 什么时候使用 NSArrayController?

objective-c - 在 objective-c 中创建一个可调整大小的 CGPoints 数组