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); // Уметнуто нејавно претварање
Иако постоје ограничења, затирање типова је кључни аспект имплементације генераика у Јави, обезбеђујући назадну компатибилност.