2012-08-07 11 views
7

In Eclipse, dopo una riga di questo tipo:Come ottenere assistenza contenuto per "for loop" ovunque in Eclipse?

Elenco elenco = nuovo ArrayList();

Digitando "per" appena sotto, e seguito da "ctrl-spazio" (per impostazione predefinita), porterà diverse opzioni che possono aiutare a completare questo "ciclo for": assist

Ma se la variabile "lista "è dichiarato lontano da qui (ad esempio come un campo classe) che non può essere dedotto direttamente da questo contesto, o ci sono molte Liste dichiarate, quindi l'assistenza non funziona bene:

not work @@ split line - -

enter image description here

In alcuni casi, Eclipse può fornire assistenza, ma non funziona per la variabile membro. Per esempio. digitare manualmente "un altro" e ENTER dopo il ":" non ha persuadere Eclipse di indovinare su di esso ....

(PS caso praticabile:

Auto indovinato

auto guessed

Inserito voluto nome, e ENTER, grandi opere

entered wanted name, and ENTER, works great)

qualcuno ha qualche suggerimento per rendere ° l'assistenza opera in tali scenari?

+1

Funziona bene: poiché nulla può essere dedotto dal contesto, genera uno scheletro di blocco foreach e consente di riempire le parti che non può indovinare. –

+0

Vedere l'immagine n. 2 e n. In alcuni casi, Eclipse può fornire assistenza, ma non funziona per la variabile membro. Per esempio. digitare manualmente "un altro" ed ENTER dopo ":" non ha convinto Eclipse a indovinarlo ... –

risposta

3

Cosa faccio di solito per risolvere il contenuto assistere con ciclo è il seguente:

  • creare una variabile locale digitando variabile collezione che è dichiarata molto al di sopra e un punto e virgola:

    list; 
    
  • premere Ctrl + 2 L

  • Eclipse genera una nuova dichiarazione di variabile locale simile a questa:

    List list2 = list; 
    
  • tipo il mio foreach e completamento automatico con Ctrl + spazio ottenendo il seguente:

    List list2 = list; 
    for (Object object : list2) { 
    } 
    
  • posto cursore sul lista2 nella per la dichiarazione loop e premete Alt + Maiusc + I, che sta per variabile in linea .

  • risultati in ciò che si desidera ottenere. Lo sforzo è minimo dopo qualche pratica:

    for (Object object : list) { 
    } 
    
+0

Grazie. Lo sto facendo in questo momento. –

5

Non l'ho provato da solo, ma dai un'occhiata alla definizione del modello di codice. Ad esempio, il modello foreach codice è definito in Preferenze -> Java -> Editor -> Modelli come segue:

Definition of foreach

La definizione è la seguente:

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

Nota le variabili utilizzate come ad esempio iterable_type.

Ora dare un'occhiata a this Pagina di aiuto di Eclipse.

C'è una variabile non ci ha chiamato ${id:localVar(type[,type]*)} che è descritto come segue:

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. 

Uno screenshot della stessa:

Variable

Credo che se si voleva aumentare la portata da che il modello foreach deduce le sue variabili, potrebbe essere necessario modificare la definizione del modello con la variabile appropriata.

Fatemi sapere se questo aiuta. Sfortunatamente, non ho approfondito la modifica dei modelli di codice prima quindi non dovrò dare un esempio concreto.

+1

Grazie. Ha fatto più ricerche al riguardo ma non ha ottenuto una soluzione perfetta al 100%. Una soluzione alternativa http://stackoverflow.com/a/2358355/367860 aiuta in qualche modo. –

13

ho seguito punta di Ashutosh Jindal e sono riuscito a configurare il modello che funziona (testato con rilascio Keplero). Eccolo:

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

Il punto principale è stato quello di cambiare localvar a var nella definizione del modello (la Eclipse docs spiegare chiaramente questo).

come usarlo:

  1. Stampa il nome del modello (foreach per modello predefinito) e premere Invio. Il modello verrà utilizzato con la raccolta predefinita selezionata da Eclipse (l'ultima raccolta dichiarata)
  2. Hit TAB due volte per passare all'elemento di raccolta. Riceverai un elenco a discesa con tutte le raccolte iterabili applicabili.
  3. Utilizzare le frecce SU/GIÙ per selezionare la raccolta desiderata, premere Invio. Eclipse aggiusterà il tipo di elemento e il nome (molto interessante).

Click for the screenshot

Questo funziona quasi buono come modelli IntelliJ. Gli svantaggi sono:

  • modello non include le matrici (al contrario di foreach modello predefinito). Per gli array devi definire un altro modello.
+0

+1 - funziona esattamente come previsto – Rekin

+0

Impressionante, questo dovrebbe avere molto più upvotes. Ho faticato a trovare una soluzione per questo e stavo per scrivere il mio, ma fortunatamente è finito qui e ho risparmiato il mio tempo. – Kranach

+0

Kranach, se ti piace la mia risposta, ti prego di revocarla. – summerian