Sobes.tech
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 instanceof k ověření parametrizovaného typu (například if (list instanceof List<String>)).
    • Nelze přetížit metody podle parametrizovaných typů, pokud jejich podpisy po odstranění odpovídají.

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.