Оператор diamond с анонимными классами
Оператор diamond теперь работает и с анонимными классами.
Сравнение кода
✕ 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) {..}
};
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Единые правила
Diamond работает везде — как в конструкторах, так и в анонимных классах.
Меньше избыточности
Аргументы типа указываются один раз слева и никогда не повторяются.
Принцип DRY
Компилятор уже знает тип — зачем писать его дважды?
Старый подход
Повторение аргументов типа
Современный подход
Diamond <>
Начиная с JDK
9
Сложность
Начинающий
Поддержка JDK
Оператор diamond с анонимными классами
Доступно
Diamond с анонимными классами с JDK 9 (сент. 2017).
Как это работает
Java 7 представила <>, но это не работало с анонимными внутренними классами. Java 9 исправила это, так что аргументы типа в правой части никогда не нужно повторять.
Связанная документация
Доказательство