Sobes.tech
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 (bijvoorbeeld if (list instanceof List<String>)).
    • Methoden kunnen niet worden overloaded op basis van geparameteriseerde types als hun gedeelten gelijk zijn na het verwijderen.

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.