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
instanceofna kontrolu parametrizovaného typu (napríkladif (list instanceof List<String>)). - Nie je možné prepísať metódy podľa parametrizovaných typov, ak ich podpisy po odstránení zodpovedajú.
- Nie je možné používať primitívne typy ako parametre generických typov (napríklad
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.