Middle+
Co je to ztráta typů v Javě?
sobes.tech AI
Odpověď od AI
Ztrátové typy (type erasure) je proces v Javě, kdy jsou informace o typech odstraněny v době kompilace a zkompilovaný bytecode neobsahuje informace o generických parametrech.
Klíčové body:
- Kompatibilita: Umožňuje generikům pracovat s starším kódem, který generiky nepoužívá.
- Implementace: Kompilátor nahrazuje parametrizované typy jejich horní hranicí (obvykle
Object) a vkládá potřebné konverze typů. - Omezení:
- Nelze používat primitivní typy jako parametry generických typů (například
List<int>). - Nelze vytvořit pole parametrizovaného typu (například
new List<String>[10]). - Nelze použít operátor
instanceofk ověření parametrizovaného typu (napříkladif (list instanceof List<String>)). - Nelze přetížit metody podle parametrizovaných typů, pokud jejich podpisy po odstranění odpovídají.
- Nelze používat primitivní typy jako parametry generických typů (například
Příklad:
// Zdrojový kód s generiky
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Není potřeba explicitní přetypování
// Bytecode po ztrátě typů
List list = new ArrayList(); // Typ List<String> nahrazen typem List
list.add("hello");
String s = (String)list.get(0); // Přidáno implicitní přetypování
Navzdory omezením je ztráta typů klíčovým aspektem implementace generik v Javě, zajišťujícím zpětnou kompatibilitu.