java - for-集合中的每个子元素,Java

标签 java foreach

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/

相关文章:

php - 如何添加 if 语句以排除特定的空行

for-loop - 捕捉 "for loop reached last element"的优雅方式?

powershell - ForEach循环两次而不是一次迭代-Powershell

java - 如何创建一个将在 JVM 终止时自动删除的临时目录?

java - 在 getCellFormula 中获取结果

javascript - 使用 vanilla javascript 添加与类名匹配的增量数据属性

java - 我可以在一行 foreach 循环中执行两种方法吗?

java - onResume() 忽略 ListView 过滤器

java - @Before 和 @Transactional

java - 来自 AWS Lambda 的 JVM GC 日志记录?