如何在Eclipse中的任何位置获得“for循环”的内容辅助?

时间:2012-08-07 12:28:18

标签: eclipse

在Eclipse中,在这样的行之后:

List list = new ArrayList();

在下面输入“for”,然后在“ctrl-space”(默认情况下)后面输入,将带来几个选项,可以帮助完成这个“for循环”: assist

但是如果变量“list”被声明远离此处(例如作为类字段),可能无法从此上下文直接推断,或者声明了许多列表,那么辅助效果不佳:

not work    @@分界线---

enter image description here

在某些情况下,Eclipse可以提供帮助,但只是不适用于成员变量。例如。在“:”之后手动输入“another”和ENTER,并没有说服Eclipse猜测它....

(P.S。可行案例:

自动猜测

auto guessed

输入想要的名字,然后输入,效果很好

entered wanted name, and ENTER, works great

在这种情况下,有没有人有任何提示让这种帮助有效?

4 个答案:

答案 0 :(得分:13)

我跟随Ashutosh Jindal的提示,我设法配置了可行的模板(使用Kepler发布测试)。这是:

for (${iterable_type:elemType(iterable)} ${iterable_element:newName(iterable_type)} :  ${iterable:var(java.lang.Iterable)}) {
    ${cursor}
}

主要是在模板定义中将 localVar 更改为 var Eclipse docs清楚地解释了这一点。)

如何使用它:

  1. 打印模板名称(默认模板的 foreach ),然后按Enter键。该模板将与Eclipse选择的默认集合(声明的最新集合)
  2. 一起使用
  3. 按两次TAB跳转到收集元素。您将获得适用的所有可迭代集合的下拉列表。
  4. 使用向上/向下箭头选择所需的集合,按Enter键。 Eclipse将调整元素类型和名称(非常酷)。
  5. Click for the screenshot

    这几乎和Intellij模板一样好用。缺点是:

    • 模板不包含数组(与默认的 foreach 模板相对)。对于数组,您必须定义另一个模板。

答案 1 :(得分:5)

我自己没有尝试过,但请看一下代码模板定义。例如,foreach代码模板在首选项 - >中定义。 Java - >编辑 - >模板如下:

Definition of foreach

定义如下:

for (${iterable_type} ${iterable_element} : ${iterable}) {
    ${cursor}
}

请注意正在使用的变量,例如iterable_type

现在看一下 this 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. 

相同的截图:

Variable

我相信如果你想增加foreach模板推断变量的范围,你可能需要用适当的变量编辑模板定义。

如果这有帮助,请告诉我。不幸的是,我没有深入研究代码模板,因此无法给出具体的例子。

答案 2 :(得分:4)

我通常使用for循环来解决内容辅助的问题如下:

  • 通过键入远远超过上面声明的集合变量和分号来创建局部变量:

    list;
    
  • 按Ctrl + 2 L

  • Eclipse生成一个新的局部变量声明,如下所示:

    List list2 = list;
    
  • 使用Ctrl +空格键入我的foreach和autocomplete,得到以下内容:

    List list2 = list;
    for (Object object : list2) {
    }
    
  • 将光标放在for循环声明中的list2上,然后按Alt + Shift + I代表内联变量。

  • 这会导致您想要实现的目标。经过一些练习后,努力很少:

    for (Object object : list) {
    }
    

答案 3 :(得分:0)

几年后,如果您输入字段/变量的名称,则可以按快速修复(⌘+ 1),然后在快速修复菜单中可以为集合或数组选择不同类型的for循环。 Automatically generate for-loop using Quick Fix