在Eclipse中,在这样的行之后:
List list = new ArrayList();
在下面键入"for",然后键入"ctrl-space"(默认情况下),将带来几个选项,可以帮助完成这个"for循环":

但是如果变量"list"被声明远离此处(例如作为类字段),可能无法从此上下文直接推断,或者声明了许多列表,则协助不能正常工作:
@@分界线---

在某些情况下,Eclipse可以提供帮助,但只是不适用于成员变量.例如,手动输入"另一个"并在":"之后输入,并没有说服Eclipse猜测它....
(PS可行案例:
自动猜到了

输入想要的名字,然后输入,效果很好
)
在这种情况下,有没有人有任何提示让这种援助工作?
sum*_*ian 13
我跟随Ashutosh Jindal的提示,我设法配置了可行的模板(使用Kepler发布测试).这里是:
for (${iterable_type:elemType(iterable)} ${iterable_element:newName(iterable_type)} : ${iterable:var(java.lang.Iterable)}) {
${cursor}
}
Run Code Online (Sandbox Code Playgroud)
重点是在模板定义中将localVar更改为var(Eclipse文档清楚地解释了这一点).
如何使用它:
这几乎和Intellij模板一样好用.缺点是:
我自己没试过,但看看代码模板定义.例如,foreach代码模板在Preferences - > Java - > Editor - > Templates中定义,如下所示:

定义如下:
for (${iterable_type} ${iterable_element} : ${iterable}) {
${cursor}
}
Run Code Online (Sandbox Code Playgroud)
注意正在使用的变量,例如iterable_type.
现在来看看这个 Eclipse帮助页面.
这里有一个变量${id:localVar(type[,type]*)},描述如下:
Evaluates to a local variable or parameter visible in the current scope that is a subtype of any of the given type. If no type is specified, any non-primitive local variable matches.
${array} is a shortcut for ${array:localVar(java.lang.Object[])}, but also matches arrays of primitive types.
${collection} is a shortcut for ${collection:localVar(java.util.Collection)}.
${iterable} is a shortcut for ${iterable:localVar(java.lang.Iterable)}, but also matches arrays.
Run Code Online (Sandbox Code Playgroud)
截图相同:

我相信如果你想增加foreach模板推断变量的范围,你可能需要用适当的变量编辑模板定义.
如果这有帮助,请告诉我.不幸的是,我还没有深入研究代码模板,因此无法给出一个具体的例子.
我通常使用 for 循环来解决内容辅助问题,如下所示:
通过键入在上方声明的集合变量和分号来创建局部变量:
list;
Run Code Online (Sandbox Code Playgroud)按 Ctrl+2 L
Eclipse 生成一个新的局部变量声明,如下所示:
List list2 = list;
Run Code Online (Sandbox Code Playgroud)输入我的 foreach 并使用 Ctrl+空格自动完成,得到以下内容:
List list2 = list;
for (Object object : list2) {
}
Run Code Online (Sandbox Code Playgroud)将光标放在 for 循环声明中的 list2 上,然后按 Alt+Shift+I(代表内联变量)。
这会导致您想要实现的目标。经过一些练习后,努力是微乎其微的:
for (Object object : list) {
}
Run Code Online (Sandbox Code Playgroud)