java - 有没有办法遍历二维 ArrayList 并调用对象的类方法?
问题描述
所以我试图遍历Java中的二维ArrayList。现在我已经完成了迭代部分,但是,我似乎无法从对象类中调用方法。
我检查了我的拼写以确保类方法拼写正确。它是。我还尝试以与遍历 2D 数组(嵌套 For-Loops)相同的方式遍历 2D ArrayList,同时显然使用 ArrayList 方法(.get()、.add() 等)来选择哪个我需要的 2D Arraylist 中的特定对象。
for(int i = 0; i < layers.size(); i++)
{
for(int j = 0; j < layers.get(i).size(); j++)
{
layers.get(i).get(j).calculate();
layers.get(i).get(j).activate();
input3.add(layers.get(i).get(j).getOutput());
}
}
预期的结果是循环将使用 ArrayList 中的每个对象调用的类对象使对象执行计算。但是,它一直说找不到我试图调用的方法,我知道这些方法在那里。我不完全确定如何解决这个问题,我只能希望其他人已经遇到这个问题并想出了如何解决它。先感谢您。
编辑/更新
应该注意的是,由于这是一个错误,BlueJ 不允许我编译它。
现在要理解我所说的“2D ArrayList”是什么意思,我是这样编码的:
enter code here
//First lets say we have a few different ArrayLists
ArrayList<Object> list1 = new ArrayList<Object>();
ArrayList<Object> list2 = new ArrayList<Object>();
ArrayList<Object> list3 = new ArrayList<Object>();
//Now lets say you want to iterate through all of these with only a few
//lines of code... Put them into another ArrayList
ArrayList<ArrayList> bigList = new ArrayList<ArrayList>();
这就是我所说的 2D ArrayList。另一个 ArrayList 中的一组 ArrayList。
.Calculate() 和 .Activate() 方法也从我提供的代码片段中未显示的对象的实例化中获取输入。
解决方案
有没有办法遍历......并调用对象的类方法?
是的,当然有。
无论对象存储在数据结构中,您都可以调用其方法。您面临的问题有两个方面:
首先,您的list1
, list2
, list3
,... 被声明为ArrayList<Object>
. 这意味着,无论您放入列表中的什么,在检索时编译器只会知道它是某种Object
. 因此,它只允许您从Object
这些元素上调用方法。这可以通过显式强制转换来解决,例如
MyClass element = (MyClass)(layers.get(i).get(j));
element.calculate();
然而,更好的选择是首先使用正确的泛型类型。请注意,ArrayList<ArrayList>
使用“原始”类型ArrayList
作为泛型类型参数,这可能不是您想要的。
因此,假设您存储的元素都是同一类型(MyClass
例如),那么干净的解决方案将是这样的:
ArrayList<MyClass> list1 = ...;
ArrayList<ArrayList<MyClass>> bigList = ...;
现在编译器会知道里面bigList
有ArrayList<MyClass>
对象,由此,它也知道里面的元素bigList
里面有MyClass
对象。因此,它会自动为您执行必要的强制转换,您可以编写bigList.get(i).get(j).methodOfMyClass(...)
.
如果您存储在内部列表中的元素没有通用(超)类型,即它们唯一的通用超类型隐式是Object
,那么您将别无选择,只能instanceof
手动进行相应的检查和强制转换。
顺便说一句,由于ArrayList
(间接)实现了Iterable
接口,你可以写
for ( ArrayList<MyClass> innerList : bigList ) {
for ( MyClass element : innerList ) {
element.methodOfMyClass(...);
}
}
遍历包含在 中的所有列表的所有元素bigList
。
推荐阅读
- php - 面临在 magento 云中更新 magento 的问题,将 magento 更新到最新版本的 magento 2.3.2
- c++ - std::ostringstream 字符串的默认值?
- google-chrome - Puppeteer 在全速运行(非无头)时在所有网站上始终为黑色
- python - 对 Keras 中的可训练参数进行排序
- c# - 获取最大绝对值及其其他相关值
- python - Python倒计时序列
- apache-spark - 为什么我得到执行者拒绝连接?
- angular - 在 npm fullcalendar 中动态加载事件
- node.js - Aysnc v3.1.0 => queue.push 在没有之后什么都不做。任务完成(定义并发)
- python-3.x - 如何在 python 数据框中切片列表值?