Middle+
Wat is type-erasure in Java?
sobes.tech AI
Antwoord van AI
Type erasure is een proces in Java waarbij informatie over types wordt verwijderd tijdens de compilatie, en de gecompileerde bytecode geen informatie bevat over generieke parameters.
Belangrijke punten:
- Compatibiliteit: Maakt het mogelijk dat generics werken met oudere code die geen generics gebruikt.
- Implementatie: De compiler vervangt geparameteriseerde types door hun bovenlimiet (meestal
Object) en voegt de benodigde typeconversies toe. - Beperkingen:
- Primitieve types kunnen niet als generieke parameters worden gebruikt (bijvoorbeeld
List<int>). - Het is niet mogelijk om een array van een geparameteriseerd type te maken (bijvoorbeeld
new List<String>[10]). - De
instanceof-operator kan niet worden gebruikt om een geparameteriseerd type te controleren (bijvoorbeeldif (list instanceof List<String>)). - Methoden kunnen niet worden overloaded op basis van geparameteriseerde types als hun gedeelten gelijk zijn na het verwijderen.
- Primitieve types kunnen niet als generieke parameters worden gebruikt (bijvoorbeeld
Voorbeeld:
// Brontaalcode met generics
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Geen expliciete cast nodig
// Bytecode na type-erasure
List list = new ArrayList(); // Type List<String> vervangen door List
list.add("hello");
String s = (String)list.get(0); // Impliciete cast toegevoegd
Ondanks de beperkingen is type erasure een belangrijk aspect van de implementatie van generics in Java, dat backward compatibility garandeert.