java - 为什么我不能在 java for-each 循环中使用现有变量?

标签 java for-loop foreach

我猜它不起作用,因为在语法中第一个参数必须具有声明的类型。但是,如果我在带有参数的函数中使用 for-each 循环(就像本示例中那样)会怎样?变量p有一个声明的类型,我只想重用它。

public void addItem(Product p) {
  // ensure that we don't add any nulls to the item list
  if (p != null ) {
    int i = 0;

    for (p : items.keySet()) {
      i++;
    }

    items.put( p , i);
  }
}

有一个相关问题,Java for loop syntax: "for (T obj : objects)" 。那个人问 for-each 语法是什么意思。我知道这意味着什么,我只是想重用现有变量,而不必声明一个新变量。

最佳答案

Java 语言规范 (JLS) 要求您为迭代器声明一个局部变量。

即你需要

for (产品 p : items.keySet()){

您不能从外部作用域借用 p。解决你的困境的一种方法是使用类似的东西

for (Product inner_p : items.keySet()){`
    p = inner_p;
    /* continue as before*/

但这规避了 JLS 的意图,因此也许将您的代码重组为更优雅的形式可能会更好。

关于java - 为什么我不能在 java for-each 循环中使用现有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797774/

相关文章:

java - 求余数时的股息

java - 仅在第一个循环中检查条件,在其余循环中执行一些代码

php - 如何从函数内部回显有关每个项目的数据?

javascript - 填充空数组

php - 具有关联数组的 PHP foreach 函数的正确语法

java - 类型不匹配 : inferred type is KClass<GenderStatistics> but Class<TypeVariable(T)! >!预计

java - struts 2中将java bean转换为json数据

java - 删除/清除测试系列的 Neo4j DB

c - 如何在for循环中获取3次数组?

java - 为什么for循环可以初始化Java中按值传递的变量