for (SubItem i : List<Item>) {
//do something
}
以上构造不起作用。我需要在循环中多次使用 i 变量。我当前的解决方案是在第一行创建一个新的、强制转换的变量。
for (Item i : List<Item>) {
SubItem si = (SubItem) i;
//do something
}
有更好的方法吗?
编辑: 列表中的所有项目都是子项目,因此我不必检查instanceOf。本质上我想要的是一种方法,如果我有一个困惑的集合,则可以避免检查类的实例
最佳答案
您无法自动转换为更详细的类型。您可以执行相反的操作:
List<SubItem> subItemList = new ArrayList<SubItem>();
for (Item i : subItemList) {
//do something
}
在您的情况下,您必须手动转换,例如如下所示:
List<Item> itemList = new ArrayList<Item>();
List<SubItem> subItemList = (List) itemList;
for (SubItem i : subItemList) {
//do something
}
我所做的转换是故意没有泛型类型的。使用提供的泛型类型( List<SubItem>
),它无法编译。请记住,如果 itemList
中有任何元素,您将在强制转换期间得到 RuntimeException ,就像这样。不会是 SubItem
类型.
关于java - for-集合中的每个子元素,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20487643/