我猜它不起作用,因为在语法中第一个参数必须具有声明的类型。但是,如果我在带有参数的函数中使用 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/