7

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

列表列表 = 新的 ArrayList();

在下方键入“for”,然后输入“ctrl-space”(默认情况下),将带来几个有助于完成此“for 循环”的选项: 协助

但是如果变量“list”声明的离这里很远(例如作为一个类字段),可能不能直接从这个上下文中推断出来,或者声明了很多列表,那么辅助就不能很好地工作:

不行 @@分割线---

在此处输入图像描述

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

(PS可行案例:

自动猜测

自动猜测

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

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

有没有人有任何提示可以使这种帮助在这种情况下发挥作用?

4

4 回答 4

13

我遵循了 Ashutosh Jindal 的提示,并设法配置了有效的模板(使用 Kepler 版本进行了测试)。这里是:

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

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

如何使用它:

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

点击查看截图

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

  • 模板不包括数组(与默认的foreach模板相反)。对于数组,您必须定义另一个模板。
于 2013-07-11T10:41:28.707 回答
6

我自己没有尝试过,但是看一下代码模板定义。例如,foreach代码模板在 Preferences -> Java -> Editor -> Templates 中定义如下:

foreach的定义

定义如下:

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

注意正在使用的变量,例如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. 

相同的屏幕截图:

多变的

我相信,如果您想增加foreach模板推断其变量的范围,您可能必须使用适当的变量编辑模板定义。

让我知道这是否有帮助。不幸的是,我之前没有深入研究过代码模板的编辑,所以无法给出具体的例子。

于 2012-08-07T12:59:41.523 回答
4

我通常用 for 循环解决内容辅助的方法如下:

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

    list;
    
  • 按 Ctrl+2 L

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

    List list2 = list;
    
  • 键入我的 foreach 并使用 Ctrl+space 自动完成,得到以下信息:

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

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

    for (Object object : list) {
    }
    
于 2012-11-28T15:53:21.710 回答
0

多年后,如果您输入字段/变量的名称,您可以按快速修复 (⌘+1),在快速修复菜单中,您可以为集合或数组选择不同类型的 for 循环。 使用 Quick Fix 自动生成 for 循环

于 2020-09-11T10:29:48.697 回答