Operator diamentowy z klasami anonimowymi
Operator diamentowy działa teraz również z klasami anonimowymi.
Porównanie kodu
✕ 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) {..}
};
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Spójne zasady
Operator diamentowy działa wszędzie — zarówno w konstruktorach, jak i w klasach anonimowych.
Mniej redundancji
Argumenty typów podaje się raz po lewej stronie, nigdy ich nie powtarzając.
Zasada DRY
Kompilator już zna typ — po co pisać go dwa razy?
Stare podejście
Powtarzanie argumentów typów
Nowoczesne podejście
Operator diamentowy <>
Od JDK
9
Poziom trudności
Początkujący
Wsparcie JDK
Operator diamentowy z klasami anonimowymi
Dostępne
Operator diamentowy z klasami anonimowymi od JDK 9 (wrzesień 2017)
Jak to działa
Java 7 wprowadziła <>, ale nie działało to z anonimowymi klasami wewnętrznymi. Java 9 naprawiła to, więc nigdy nie trzeba już powtarzać argumentów typów po prawej stronie.
Powiązana dokumentacja
Dowód