2012-07-03 6 views
8

"Fare riferimento agli oggetti tramite le loro interfacce" è una buona pratica, come menzionato in Java efficace. Così, per esempio preferiscoCompletamento automatico per i tipi generici in Eclipse

List<String> al = new ArrayList<String>(); 

oltre

ArrayList<String> al = new ArrayList<String>(); 

nel mio codice. Una cosa fastidiosa è che se digito ArrayList<String> al = new e poi premo Ctrl + Spazio in Eclipse ottengo ArrayList<String>() come propostale. Ma se scrivo List al = new e poi premo Ctrl + Space, otterrò solo il propostal per definire la classe interna anonima, ma non i propostals come new ArrayList<String>(), il 99% del caso, o per esempio il nuovo Vector<String>().

Domanda: C'è un modo per ottenere sottoclassi come propostali per tipi generici?

+1

Sarebbe troppo sfacciato suggerire "Usa Guava e' Lists.newArrayList() '? –

+1

ovviamente è buono, ma in realtà voglio ottenere tutte le sottoclassi come propostale, non solo per gli elenchi. – AvrDragon

+1

@JonSkeet Dovresti aggiungere una nuova dipendenza (voglio dire che vuoi aggiungere comunque, ma non assumere) solo per cambiare 'nuovo ArrayList <>()' in 'Lists.newArrayList()'? –

risposta

9

Suggerisco semplicemente di scrivere prima l'espressione e poi di premere Ctrl+2, L. Quindi è possibile assegnare un nome alla variabile, seguito da Enter, Down, Enter. Fatto.

+0

Ma sembra che riempia il tipo di variabile come 'ArrayList' invece di' List' per esempio (così ottieni lo stesso risultato) –

+0

@PaulBellora: hai perso la sequenza di tasti, che seleziona il secondo suggerimento nell'elenco dei tipi suggeriti per la variabile e. E dovrebbe essere List, dove ArrayList sarebbe il primo. – Bananeweizen

+0

@Bananeweizen - Hai ragione mi è mancato - grazie. +1 –

2

A seconda del tuo stile personale di scrittura di tale codice, questa è un'alternativa ispirata alla risposta di @Ben Schulz. Se in genere scrive l'assegnazione prima come

al = new ArrayList<String>(); 

quindi è possibile utilizzare Ctrl+1 per avviare il "Crea variabile locale" quick fix. Colpendo Tab ora si aprirà direttamente la selezione del tipo in cui si seleziona il tipo List.

2

JDK 1.7 non ha bisogno di specificare il tipo generico a destra della parità. Preferenza -> Java -> Compilatore a 1.6