Шаблон "Surround with" в Eclipse: foreach - PullRequest
9 голосов
/ 28 февраля 2010

Я новичок в Eclipse, который я использую в основном для Java. Ранее я использовал IntelliJ Idea, в которой можно выбрать переменную, которая расширяет Iteratable (Collection, List и т. Д.), И заставить ее создавать правильный цикл foreach.

Я знаю, что Eclipse делает нечто подобное с шаблоном foreach, где он угадывает, какую переменную перебирать, но я не могу получить то же самое с выбранной переменной. Но что, если переменная не находится в текущей области видимости, а что если Eclipse угадает неправильно?

Итак, я пытаюсь выбрать возможность (или функцию, которая возвращает переменную), которая реализует Iterator, и вернуть его:

Выбор:

functionWhichReturnsList()   (which returns List<TypeOfItemsInList>)

Результат:

for (TypeOfItemsInList item : functionWhichReturnsList()) {  
   ${cursor}  
}

Есть идеи?

Ответы [ 4 ]

8 голосов
/ 23 мая 2012

Обновление 2 :

В Eclipse 4.4 Что нового в Luna (JDT) Для этой проблемы был добавлен QuickFix. Это также может быть использовано для массивов, коллекций и карт (наборы ключей и значений).

enter image description here

Обновление 1

Недавно я обнаружил плагин eclipse, обеспечивающий завершение кода с постфиксом (https://github.com/trylimits/Eclipse-Postfix-Code-Completion).). Вот как это работает в цикле foreach:

enter image description here

Кроме того, плагин предоставляет более полезные соревнования:)

Для Eclipse до 4.4:

У меня тоже такая же проблема, но я не смог найти решение. Итак, на данный момент я выполняю следующие шаги, чтобы получить нужный цикл.

fore [Ctrl-пробел] и выберите шаблон 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. Просто дважды щелкните по нему и начните печатать.

8 голосов
/ 01 марта 2010

Обычно я создаю такой код, выполняя следующие действия:

Вызовите функцию и используйте Ctrl-1 для создания локальной переменной, содержащей возвращаемое значение:

List<TypeOfItemsInList> list = functionWhichReturnsList()

Введите fore [Ctrl-space], чтобы вставить цикл for (поскольку eclipse обычно выбирает ближайшую итерацию при построении цикла):

List<TypeOfItemsInList> list = functionWhichReturnsList()

for (TypeOfItemsInList item : list) {
}

Вставьте локальную переменную, поместив курсор на переменную списка и напечатав Alt + Shift + I:

for (TypeOfItemsInList item : functionWhichReturnsList()) {
}

Это не оптимально, но работает.

0 голосов
/ 01 марта 2010

Вы, вероятно, не можете сделать это в Eclipse, но введите for и дважды нажмите Ctrl-Space, и вы увидите всплывающее меню шаблонов кода. Тогда вы можете выбрать functionWhichReturnsList() в нужном месте, а затмение сделает все остальное.

0 голосов
/ 01 марта 2010

Насколько я знаю, Eclipse не поддерживает это так, как вы описываете.

Если Eclipse не находит нужную переменную, вы можете использовать клавишу табуляции для перебора заполнителей в шаблоне foreach. В итерируемой точке затмение покажет вам список итераций, которые вы можете выбрать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...