Diamond com classes anônimas
O operador diamond agora funciona também com classes anônimas.
Comparação 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) {..}
};
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Regras consistentes
O diamond funciona em todos os lugares — construtores e classes anônimas.
Menos redundância
Argumentos de tipo são declarados uma vez à esquerda, nunca repetidos.
Princípio DRY
O compilador já sabe o tipo — por que escrevê-lo duas vezes?
Abordagem Antiga
Repetir argumentos de tipo
Abordagem Moderna
Diamond <>
Desde o JDK
9
Dificuldade
Iniciante
Suporte JDK
Diamond com classes anônimas
Disponível
Diamond com classes anônimas desde o JDK 9 (set 2017).
Como funciona
O Java 7 introduziu o <>, mas ele não funcionava com classes internas anônimas. O Java 9 corrigiu isso, então você nunca mais precisa repetir argumentos de tipo no lado direito.
Documentação Relacionada