Sobes.tech
Middle+

Šta je brisanje tipova u Javi?

sobes.tech АИ

Одговор од АИ

Затирање типова (type erasure) је процес у Јави у којем се информације о типовима бришу у фази компилације, а компајлирани байт код не садржи информације о параметрима генераика.

Кључне тачке:

  • Сагласност: Омогућава да генераички типови раде са старијим кодом који не користи генераике.
  • Реализација: Компилатор замењује параметризоване типове њиховим горњим границама (обично Object) и убацује потребне конверзије типова.
  • Ограничења:
    • Не могу се користити примитивни типови као параметри генераика (нпр. List<int>).
    • Не може се креирати масив параметризованог типа (нпр. new List<String>[10]).
    • Не може се користити оператор instanceof за проверу параметризованог типа (нпр. if (list instanceof List<String>)).
    • Не могу се преоптеретити методи по параметризираном типу ако њихове потписе након избрисања подударају.

Пример:

// Изворни код са генераицима
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Не захтева експлицитно претварање

// Биткод након брисања типова
List list = new ArrayList(); // Тип List<String> замењен са List
list.add("hello");
String s = (String)list.get(0); // Уметнуто нејавно претварање

Иако постоје ограничења, затирање типова је кључни аспект имплементације генераика у Јави, обезбеђујући назадну компатибилност.