2010-08-19 3 views
13

Je veux sélectionner un Iterable, appuyez sur Alt + Shift + Z pour obtenir le menu contextuel "Surround With" et afficher un modèle foreachwrap qui encapsulera la sélection dans un pour chaque boucle avec le format approprié.Modèle Eclipse pour envelopper une sélection itérative dans un pour chaque boucle

Par exemple, je veux choisir

someObject.getSomeList() 

et générer ce

for (SomeListType someListType : someObject.getSomeList()) { 

} 

J'ai essayé quelque chose comme ça, mais il ne semble pas fonctionner:

for(${t:elemType(ls)} ${:name(t)} : ${ls:line_selection}) 
{ 
    ${cursor} 
} 
+6

Je vais vérifier ça. Vous pouvez également taper "foreach", appuyer sur Ctrl-Espace et sélectionner la proposition "foreach - itérer sur un tableau ou Iterable", et générer le code à partir du modèle "foreach" en utilisant la variable Iterable ou tableau référencée en dernier . – Ladlestein

+0

Je suggère que vous postez cela sous http://stackoverflow.com/questions/1028858/useful-eclipse-java-code-templates pour éviter la duplication. Quant à la question, je suis un peu douteuse. Les informations de type générique ne sont pas conservées dans le bytecode, dont l'absence gênerait la solution. Je suis vraiment curieux de voir les réponses! – questzen

+0

@questzen Les informations de type générique (au moins pour les classes et les signatures de méthodes) sont conservées dans le bytecode, sinon le compilateur Java ne peut pas l'utiliser. Les informations génériques ne sont cependant pas utilisées lors de l'exécution. –

Répondre

5

Utilisez QuickFix (Ctrl+1 sur Win/Lin ou Cmd+1 sur le Mac).

Vous pouvez obtenir le comportement souhaité avec l'approche suivante:

  1. Ecrire l'instruction qui renvoie la collection itératives, par exemple

    someObject.getSomeList() 
    
  2. Press Ctrl+1 (Cmd+1 sur Mac) et sélectionnez Assign statement to a new local variable (il y a même une combinaison directe de cette action (Cmd + 2 L sur le cependant, Mac), si vous voulez l'utiliser, il probablement dépend de la façon dont des combinaisons très différentes que vous voulez vous rappeler)

  3. Ecrire pas plus

    fore 
    

    et appuyez sur Ctrl+1 (Cmd+1) à nouveau, puis sélectionnez Iterate over an array or iterable (simplement en appuyant sur Entrée juste après le menu quickfix apparaît est généralement suffisant à ce stade) et vous obtenez quelque chose comme ceci:

    for (Content content : someList) { 
    
    } 
    

Vous pouvez maintenant inline même l'utilisation de la variable locale pour se débarrasser de encore une fois (en utilisant QuickFix bien sûr;). QuickFix est vraiment puissant, je n'ai presque jamais utilisé de modèles depuis que cette fonctionnalité a été publiée.

+0

Oui, c'est ce que je fais maintenant. Espérait quelque chose de mieux. Je suppose qu'il n'y en a pas. –

Questions connexes