Language Начинающий

Оператор 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
Сложность
Начинающий
Оператор diamond с анонимными классами
Доступно

Diamond с анонимными классами с JDK 9 (сент. 2017).

Java 7 представила <>, но это не работало с анонимными внутренними классами. Java 9 исправила это, так что аргументы типа в правой части никогда не нужно повторять.