Middle
Wat zijn Generics en waar worden ze voor gebruikt?
sobes.tech AI
Antwoord van AI
Generics in Java maken het mogelijk om klassen, interfaces en methoden te maken die werken met getypeerde parameters.
Het belangrijkste doel van Generics:
- Verbetering van typeveiligheid: De compiler controleert de types tijdens het compileren, waardoor
ClassCastExceptiontijdens runtime wordt voorkomen. - Verwijdering van typeconversies: Het is niet nodig om types handmatig te casten bij het ophalen van elementen uit collecties.
- Creëren van flexibelere en herbruikbare code: Je kunt generieke algoritmen en datastructuren schrijven die toepasbaar zijn op verschillende datatypes.
Voorbeeld zonder Generics:
// Voor Java 5
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // zonder typeaanduiding
list.add("hallo");
list.add(123); // kan elk object toevoegen
String s = (String) list.get(0); // casten is nodig
Integer i = (Integer) list.get(1); // casten is nodig
// Kan leiden tot runtime fouten
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Voorbeeld met Generics:
// Met Generics
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // lijst van strings
list.add("hallo");
// list.add(123); // compileerfout - kan geen Integer toevoegen
String s = list.get(0); // geen cast nodig
// Het is niet mogelijk om een ander type toe te voegen, voorkomt fouten
// List<Integer> intList = new ArrayList<>();
// intList.add("wereld"); // compileerfout
System.out.println(s);
}
}
Generics worden ook gebruikt in:
- Klassen:
ArrayList<E>,HashMap<K, V> - Interfaces:
List<E>,Map<K, V> - Methoden:
<T> void printArray(T[] array) - Typebeperkingen:
<T extends Comparable<T>>(beperking tot types dieComparableimplementeren)
De implementatie van Generics in Java is gebaseerd op "type erasure" (type-verdwijning) tijdens het compilatieproces. Dit betekent dat informatie over de generieke types wordt verwijderd, en dat de JVM tijdens runtime werkt met raw types. Dit garandeert compatibiliteit met oudere Java-versies, maar heeft enkele beperkingen.