Sobes.tech
Middle+

Čo je to vymazanie typov v Jave?

sobes.tech AI

Odpoveď od AI

Zatieranie typov (type erasure) je proces v Jave, pri ktorom sa informácie o typoch odstraňujú počas fázy kompilácie, a skompilovaný bytecode neobsahuje informácie o generických parametroch.

Kľúčové body:

  • Kompatibilita: Umožňuje generikom pracovať so starším kódom, ktorý generiky nepoužíva.
  • Implementácia: Kompilátor nahradí parametrizované typy ich hornou hranicou (zvyčajne Object) a vloží potrebné konverzie typov.
  • Obmedzenia:
    • Nie je možné používať primitívne typy ako parametre generických typov (napríklad List<int>).
    • Nie je možné vytvoriť pole parametrizovaného typu (napríklad new List<String>[10]).
    • Nie je možné použiť operátor instanceof na kontrolu parametrizovaného typu (napríklad if (list instanceof List<String>)).
    • Nie je možné prepísať metódy podľa parametrizovaných typov, ak ich podpisy po odstránení zodpovedajú.

Príklad:

// Zdrojový kód s generikami
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Nie je potrebný explicitný pretyp

// Bytecode po odstránení typov
List list = new ArrayList(); // Typ List<String> nahradený typom List
list.add("hello");
String s = (String)list.get(0); // Implicitné pretypovanie vložené

Napriek obmedzeniam je zatieranie typov kľúčovým aspektom implementácie generík v Jave, zabezpečujúcim spätnú kompatibilitu.