2010-02-28 15 views
9

Sono nuovo di Eclipse che utilizzo principalmente per Java. In precedenza ho utilizzato IntelliJ Idea in cui è possibile selezionare una variabile che estende Iteratable (Collection, List ecc.) E produrre un ciclo foreach corretto."Surround with" -template in Eclipse: foreach

So che Eclipse fa qualcosa di simile con il modello foreach, dove indovina quale variabile iterare sopra, ma non riesco a ottenere la stessa cosa con una variabile selezionata. Ma cosa succede se la variabile non è nel campo di applicazione corrente e cosa succede se Eclipse indovina sbagliato?

Quindi quello che sto cercando di fare è essere in grado di selezionare una variabile (o una funzione che restituisce una variabile) che implementa Iterator e farlo tornare:

Selezione:

functionWhichReturnsList() (which returns List<TypeOfItemsInList>) 

Risultato:

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

Qualche idea?

+1

Vedere [questa risposta] [1] per il problema root. [1]: http://stackoverflow.com/a/17591263/2394218 – summerian

+0

Questo ha funzionato per me https://stackoverflow.com/a/17591263/1053496 – nantitv

risposta

8

Io di solito creare codice come questo seguendo questi passaggi:

chiamare la funzione e utilizzare Ctrl-1 per creare una variabile locale tenendo il valore di ritorno:

List<TypeOfItemsInList> list = functionWhichReturnsList() 

Tipo ribalta [Ctrl-spazio ] per inserire il ciclo for (dal eclisse solito sceglie più vicino iterabile nel costruire l'anello):

List<TypeOfItemsInList> list = functionWhichReturnsList() 

for (TypeOfItemsInList item : list) { 
} 

linea la variabile locale mettendo il cursore sulla lista variabile e digitando Alt + Maiusc + I:

for (TypeOfItemsInList item : functionWhichReturnsList()) { 
} 

Non è ottimale, ma funziona.

+1

Questo è il metodo che ho avuto usando pure, ma è a dir poco fastidioso. Forse questo è il territorio del plugin? O forse un cambiamento nel sistema dei template in Eclipse stesso? – Casper

+0

Non ho modo migliore di questo. Inoltre, chiamare un metodo all'interno di un ciclo for sarà costoso se è nella forma di for (int i = 0; i

+1

La migliore risposta: http://stackoverflow.com/a/17591263/2650097 – Kranach

0

Per quanto ne so, Eclipse non lo supporta nel modo in cui lo descrivete.

Se Eclipse non trova la variabile corretta, è possibile utilizzare il tasto tabulatore per scorrere i segnaposto nel modello foreach. Nel punto iterabile, eclissi ti mostrerà una lista di iterabili tra cui puoi scegliere.

0

Probabilmente non è possibile farlo in eclissi, ma digitare for e premere Ctrl-Space due volte si vedrà il menu dei modelli di codice pop-up. Quindi puoi selezionare functionWhichReturnsList() nel posto giusto ed eclissi farà il resto.

8

Aggiornamento

Recentemente ho trovato un plugin Eclipse che fornisce il completamento del codice suffisso (https://github.com/trylimits/Eclipse-Postfix-Code-Completion). Questo è come funziona per il ciclo foreach:

enter image description here

Accanto, il plugin fornisce più utile concorsi :)

Aggiornamento:

In Eclipse 4.4 What's New in Luna (JDT) un QuickFix è stato aggiunto per questa edizione.Questo può essere anche utilizzato per matrici, raccolte e mappe (serie di chiavi e valori).

enter image description here

per Eclipse prima di 4.4:

Sto anche avendo lo stesso problema, ma non ero in grado di trovare una soluzione. Quindi, per il momento eseguo i seguenti passaggi per ottenere il ciclo desiderato.

ribalta [Ctrl-spazio] e selezionare il modello foreach, ottengo il seguente:

for (iterable_type iterable_element : iterable) { 

} 

poi eseguire un doppio click sul iterable e sostituirla con il metodo:

for (iterable_type iterable_element : functionWhichReturnsList()) { 

} 

nella fase successiva fai clic su functionWhichReturnsList() e premi Ctrl-1. Eclipse suggerirà di cambiare il tipo iterable_element in TypeOfItemsInList. Questo è voglio che si ottiene alla fine:

for (TypeOfItemsInList iterable_element : functionWhichReturnsList()) { 

} 

Ora, è solo bisogno di trovare un nome adeguato per iterable_element. Basta fare doppio clic su di esso e iniziare a digitare.

+0

Grazie. Funziona su Eclipse Mars! – lmo

Problemi correlati