2010-02-28 22 views
9

Soy nuevo en Eclipse, que utilizo principalmente para Java. Anteriormente utilicé IntelliJ Idea, en el cual es posible seleccionar una variable que amplíe Iteratable (Collection, List, etc.) y hacer que produzca un bucle foreach correcto."Surround with" -template en Eclipse: foreach

Sé que Eclipse hace algo similar con la plantilla foreach, donde adivina qué variable iterar, pero no puedo obtener lo mismo con una variable seleccionada. Pero, ¿y si la variable no está en el alcance actual y qué sucede si Eclipse adivina que está mal?

Así que lo que estoy tratando de hacer es ser capaz de seleccionar una variable (o función que devuelve una variable) que implementa iterador y he devolverlo:

Selección:

functionWhichReturnsList() (which returns List<TypeOfItemsInList>) 

Resultado:

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

¿Alguna idea?

+1

Consulte [esta respuesta] [1] para conocer el problema de la raíz. [1]: http://stackoverflow.com/a/17591263/2394218 – summerian

+0

Éste trabajó para mí https://stackoverflow.com/a/17591263/1053496 – nantitv

Respuesta

8

Me suelen crear un código como éste, siguiendo estos pasos:

llamar a la función y el uso de Ctrl-1 para crear una variable local que contiene el valor de retorno:

List<TypeOfItemsInList> list = functionWhichReturnsList() 

Tipo proa [Ctrl-espacio ] para insertar el bucle (ya que el eclipse suele escoger el más cercano iterable en la construcción de la circular):

List<TypeOfItemsInList> list = functionWhichReturnsList() 

for (TypeOfItemsInList item : list) { 
} 

Inline la variable local al poner el cursor sobre el lista variable y escribir Alt + Shift + I:

for (TypeOfItemsInList item : functionWhichReturnsList()) { 
} 

No es óptimo, pero funciona.

+1

Este es el método que he sido usando también, pero es molesto por decir lo menos. Quizás esto es un territorio de plugins? ¿O tal vez un cambio en el sistema de plantillas en Eclipse mismo? – Casper

+0

No tengo nada mejor que esto. Además, llamar a un método dentro de un bucle for será costoso si tiene la forma de for (int i = 0; i

+1

La mejor respuesta: http://stackoverflow.com/a/17591263/2650097 – Kranach

0

Hasta donde yo sé, Eclipse no lo admite en la forma que usted describe.

Si Eclipse no encuentra la variable correcta, puede usar la tecla tabulador para recorrer los marcadores de posición en la plantilla foreach. En el punto iterable, eclipse le mostrará una lista de elementos iterables entre los que puede elegir.

0

Probablemente no pueda hacer eso en eclipse, pero escriba for y pulse Ctrl-Space dos veces verá aparecer el menú de plantillas de códigos. Luego puede seleccionar functionWhichReturnsList() en el lugar correcto y eclipse hará el resto.

8

actualización

poco encontré un plugin de Eclipse que proporciona la terminación código de sufijo (https://github.com/trylimits/Eclipse-Postfix-Code-Completion). Esta es la forma en que trabaja para el bucle foreach:

enter image description here

lado, el plugin proporciona más votos competiciones :)

Actualizar:

En Eclipse 4.4 What's New in Luna (JDT) se añadió una QuickFix para este problema.Esto también se puede usar para matrices, colecciones y mapas (conjuntos de claves y valores).

enter image description here

para Eclipse 4.4 antes:

También estoy teniendo el mismo problema, pero yo no era capaz de encontrar una solución. Entonces, por el momento, realizo los siguientes pasos para obtener el ciclo deseado.

primer plano [Ctrl-espacio] y seleccione la plantilla foreach, me sale el siguiente:

for (iterable_type iterable_element : iterable) { 

} 

entonces realizar un doble clic sobre iterable y reemplazarlo con el método:

for (iterable_type iterable_element : functionWhichReturnsList()) { 

} 

en el siguiente paso simplemente haga clic en functionWhichReturnsList() y presione Ctrl-1. Eclipse sugerirá cambiar el tipo iterable_element a TypeOfItemsInList. Esta es quieren llegar al final:

for (TypeOfItemsInList iterable_element : functionWhichReturnsList()) { 

} 

Ahora, sólo tiene que encontrar un nombre adecuado para iterable_element. Simplemente haga doble clic en él y comience a escribir.

+0

Gracias. ¡Funciona en Eclipse Mars! – lmo

Cuestiones relacionadas