Java 9: Diamond Operator (<>) для анонимных внутренних классов
Diamond operator (<>) появился в Java 7 для сокращения generic-конструкторов, но не работал с анонимными классами. Java 9 устранила это ограничение.
До Java 9 (verbose)
Handler<Integer> intHandler = new Handler<Integer>(1) { ... };
Handler<? extends Number> intHandler1 = new Handler<Number>(2) { ... };
Handler<?> handler = new Handler<Object>("test") { ... };
Java 9+: с diamond operator
Handler<Integer> intHandler = new Handler<>(1) { ... };
Handler<? extends Number> intHandler1 = new Handler<>(2) { ... };
Handler<?> handler = new Handler<>("test") { ... };
Тип выводится из левой части присваивания. Код становится чище и читаемее.
Полный пример
public class Tester {
public static void main(String[] args) {
Handler<Integer> intHandler = new Handler<>(1) {
@Override public void handle() { System.out.println(content); }
}; intHandler.handle();
Handler<? extends Number> intHandler1 = new Handler<>(2) {
@Override public void handle() { System.out.println(content); }
}; intHandler1.handle();
Handler<?> handler = new Handler<>("test") {
@Override public void handle() { System.out.println(content); }
}; handler.handle();
}
}
abstract class Handler<T> {
public T content;
public Handler(T content) { this.content = content; }
abstract void handle();
}
Вывод
1
2
Test
java
- Ключевое слово final в Java: переменные, методы и классы
- Оператор instanceof в Java: полное руководство с примерами
- Вложенные и внутренние классы в Java: типы, примеры и лучшие практики
- Статические вложенные классы в Java: использование, отличия и примеры
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Паттерн Singleton в Java: как реализовать и безопасно использовать
- Рефлексия в Java: инспекция классов, методов и полей во время выполнения
- Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
- Освоение Java Generics: создание переиспользуемого, типобезопасного кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление