Java Diamond Operator: Generics Vereenvoudigen in Java 7+
Java Diamond Operator
De diamond operator werd geïntroduceerd in Java 7 om code leesbaarder te maken voor Generics. Een generic is een type argument. Door generics te gebruiken kunnen we elk type object doorgeven om verwerkt te worden door de klassenmethoden. Bijvoorbeeld, als we een lijst van strings aanmaken voor Java 7, moesten we de volgende syntaxis gebruiken om een lijst van strings te instantiëren met een ArrayList-object.
List<String> listOfStrings = new ArrayList<String>();
Vanaf Java 7 kunnen we de diamond operator gebruiken om de bovenstaande syntaxis te vereenvoudigen als volgt:
List<String> listOfStrings = new ArrayList<>();
Maar het kon niet gebruikt worden met anonieme inner classes. Bijvoorbeeld, we kunnen het objecttype niet weglaten uit de diamond operator in de onderstaande syntaxis voor Java 9.
Handler<Integer> intHandler = new Handler<Integer>(1) {
@Override public void handle() { System.out.println(content); }
};
Diamond Operator in Anonieme Klasse
In Java 9 kan de diamond operator ook met een anonieme klasse worden gebruikt om code te vereenvoudigen en leesbaarheid te verbeteren.
Handler<Integer> intHandler = new Handler<>(1) {
@Override public void handle() { System.out.println(content); }
};
Diamond Operator in Java 7, Java 8
In het onderstaande voorbeeld hebben we anonieme klassen gemaakt voor een abstracte klasse Handler die een generiek argument accepteert en het objecttype doorgeven tijdens het maken van de anonieme klasse, omdat we het type-argument moeten doorgeven anders compileert het programma niet.
Voorbeeld
public class Tester {
public static void main(String[] args) {
// maak een anonieme klasse om 1 te verwerken
// Hier moeten we Type-argumenten in diamond operator doorgeven
// voor Java 9 anders zal compiler error klachten
Handler<Integer> intHandler = new Handler<Integer>(1) {
@Override public void handle() { System.out.println(content); }
};
intHandler.handle();
// maak een anonieme klasse om 2 te verwerken
Handler<? extends Number> intHandler1 = new Handler<Number>(2) {
@Override public void handle() { System.out.println(content); }
};
intHandler1.handle();
Handler<?> handler = new Handler<Object>("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();
}
Uitvoer
Laten we het bovenstaande programma compileren en uitvoeren, dit produceert het volgende resultaat:
1 2 Test
Diamond Operator Java 9 en Later
Met Java 9 kunnen we de <> operator ook met anonieme klasse gebruiken zoals hieronder getoond.
Voorbeeld
In het onderstaande voorbeeld hebben we anonieme klassen gemaakt voor een abstracte klasse Handler die een generiek argument accepteert maar zonder het objecttype tijdens het maken van de anonieme klasse, omdat we het type-argument niet hoeven door te geven. De compiler inferteert het type zelf.
public class Tester {
public static void main(String[] args) {
// maak een anonieme klasse om 1 te verwerken
// Hier hoeven we geen Type-argumenten in diamond operator door te geven
// want Java 9 compiler kan het type automatisch infereren
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();
}
Uitvoer
Laten we het bovenstaande programma compileren en uitvoeren, dit produceert het volgende resultaat:
1 2 Test
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java LinkedHashMap beheersen: Aanmaak, operaties en prestatievergelijking
- Log4j Beheersen: 30 Essentiële Interviewvragen & Expert Antwoorden (2026)
- Java String Vervanging beheersen: replace(), replaceAll() en replaceFirst() uitgelegd
- Java polymorfisme meesteren: concepten, voorbeelden en best practices
- Java Logging meesteren: fundamentals & best practices
- Java palindroom-getal checker: Algoritmen met while en for lussen
- Java 10: Belangrijkste verouderde API's, features en opties verwijderd
- Java FileReader: Uitgebreide gids en praktische voorbeelden
- Java Wrapper-klassen begrijpen: typen, conversies en voordelen
- Java LinkedHashSet beheersen: Kenmerken, methoden en praktische voorbeelden