我是Eclipse的新手,我主要用于Java。我之前使用过IntelliJ Idea,它可以选择一个扩展Iteratable(Collection,List等)的变量,并生成一个正确的foreach循环。
我知道Eclipse与foreach模板做了类似的事情,它猜测要迭代哪个变量,但是我不能用选定的变量来做同样的事情。但是,如果变量不在当前范围内,如果Eclipse猜错了怎么办?
所以我要做的是能够选择一个实现Iterator并让它返回的变量(或返回变量的函数):
选择:
functionWhichReturnsList() (which returns List<TypeOfItemsInList>)
结果:
for (TypeOfItemsInList item : functionWhichReturnsList()) {
${cursor}
}
有什么想法吗?
答案 0 :(得分:8)
我通常按照以下步骤创建这样的代码:
调用该函数并使用Ctrl-1创建一个包含返回值的局部变量:
List<TypeOfItemsInList> list = functionWhichReturnsList()
键入fore [Ctrl-space]以插入for循环(因为eclipse通常在构造循环时选择最接近的iterable):
List<TypeOfItemsInList> list = functionWhichReturnsList()
for (TypeOfItemsInList item : list) {
}
通过将光标放在列表变量上并键入Alt + Shift + I:
来内联局部变量for (TypeOfItemsInList item : functionWhichReturnsList()) {
}
这不是最佳选择,但可行。
答案 1 :(得分:8)
更新2 :
在Eclipse 4.4 What's New in Luna (JDT)中,为此问题添加了QuickFix。这也可以用于数组,集合和映射(键集和值)。
更新1
我最近发现了一个提供后缀代码完成的eclipse插件(https://github.com/trylimits/Eclipse-Postfix-Code-Completion)。这就是foreach循环的工作原理:
此外,该插件提供了更多有用的比赛:)
对于4.4之前的Eclipse:
我也有同样的问题,但我找不到解决方案。所以,目前我执行以下步骤来获得所需的循环。
在[Ctrl-space]之前选择foreach模板,我得到以下内容:
for (iterable_type iterable_element : iterable) {
}
然后我对iterable
执行双击并将其替换为方法:
for (iterable_type iterable_element : functionWhichReturnsList()) {
}
下一步只需点击functionWhichReturnsList()
然后按Ctrl-1即可。 Eclipse会建议将类型iterable_element
更改为TypeOfItemsInList
。这是希望你到最后:
for (TypeOfItemsInList iterable_element : functionWhichReturnsList()) {
}
现在,您只需找到iterable_element
的正确名称即可。只需双击它即可开始输入。
答案 2 :(得分:0)
据我所知,Eclipse不会以你描述的方式支持它。
如果Eclipse找不到正确的变量,您可以使用制表符键迭代foreach模板中的占位符。在可迭代点,eclipse将向您显示可供选择的可迭代列表。
答案 3 :(得分:0)
您可能无法在eclipse中执行此操作,但键入for
并按Ctrl-Space
两次,您将看到弹出的代码模板菜单。然后你可以在适当的位置选择functionWhichReturnsList()
,eclipse将完成其余的工作。