Operador diamond con clases anónimas
El operador diamond ahora también funciona con clases anónimas.
Comparación de Código
✕ Java 7/8
Map<String, List<String>> map =
new HashMap<String, List<String>>();
// anonymous class: no diamond
Predicate<String> p =
new Predicate<String>() {
public boolean test(String s) {..}
};
✓ Java 9+
Map<String, List<String>> map =
new HashMap<>();
// Java 9: diamond with anonymous classes
Predicate<String> p =
new Predicate<>() {
public boolean test(String s) {..}
};
¿Ves un problema con este código? Cuéntanos.
Por qué gana la forma moderna
Reglas consistentes
Diamond funciona en todas partes: constructores y clases anónimas por igual.
Menos redundancia
Los argumentos de tipo se declaran una vez a la izquierda, sin repetirlos.
Principio DRY
El compilador ya conoce el tipo — ¿para qué escribirlo dos veces?
Enfoque Antiguo
Repetir argumentos de tipo
Enfoque Moderno
Diamond <>
Desde JDK
9
Dificultad
Principiante
Soporte JDK
Operador diamond con clases anónimas
Disponible
Diamond con clases anónimas desde JDK 9 (sept. 2017).
Cómo funciona
Java 7 introdujo <> pero no funcionaba con clases internas anónimas. Java 9 corrigió esto, de modo que nunca necesitas repetir los argumentos de tipo en el lado derecho.
Documentación Relacionada