2012-07-03 18 views
8

"Consultar objetos por sus interfaces" es una buena práctica, como se menciona en Java efectivo. Así, por ejemplo, prefieroAutocompletar para tipos genéricos en Eclipse

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

sobre

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

en mi código. Una cosa molesta es que si escribo ArrayList<String> al = new y luego presiono Ctrl + Espacio en Eclipse obtengo ArrayList<String>() como propuesta. Pero si escribo List al = new y luego presiono Ctrl + Space obtendré solo propostal para definir la clase interna anónima, pero no propostales como new ArrayList<String>(), lo que es 99% el caso, o por ejemplo Vector<String>() nuevo.

Pregunta: ¿Hay alguna manera de obtener las subclases como propuestas para los tipos genéricos?

+1

¿Sería demasiado atrevido sugerir "Usar Guava y' Lists.newArrayList() '? –

+1

por supuesto que es bueno, pero en realidad quiero que todas las subclases sean propostales, no solo para listas. – AvrDragon

+1

@JonSkeet Agregaría una nueva dependencia (me refiero a que desea agregarla de todos modos, pero asuma que no) solo para cambiar 'new ArrayList <>()' a 'Lists.newArrayList()'? –

Respuesta

9

Sugeriría simplemente escribir la expresión primero y luego presionando Ctrl+2, L. Luego puede nombrar la variable, seguido de Enter, Down, Enter. Hecho.

+0

Pero parece que llena el tipo de variable como 'ArrayList' en lugar de' List' por ejemplo (entonces obtienes el mismo resultado). –

+0

@PaulBellora: Te perdiste la secuencia de teclas, que selecciona la segunda sugerencia en la lista de tipos sugeridos para la variabl mi. Y eso debería ser List, donde ArrayList sería el primero. – Bananeweizen

+0

@Bananeweizen - Tienes razón, lo extrañé, gracias. +1 –

2

Dependiendo de su estilo personal de escribir dicho código, esta es una alternativa inspirada en la respuesta de @Ben Schulz. Si suele escribir la asignación primero como

al = new ArrayList<String>(); 

entonces se puede utilizar para iniciar el Ctrl+1 "Crear variable local" solución rápida. Al pulsar Tab, se abrirá directamente la selección de tipo donde seleccione el tipo List.

2

JDK 1.7 no necesita especificar el tipo genérico a la derecha del igual. Preferencia -> Java -> Compilador a 1.6