Middle+
Czym jest usuwanie typów w Java?
sobes.tech AI
Odpowiedź od AI
Usuwanie typów (type erasure) to proces w Javie, w którym informacje o typach są usuwane na etapie kompilacji, a skompilowany kod bajtowy nie zawiera informacji o parametrach generycznych.
Kluczowe punkty:
- Zgodność: Pozwala generykom działać z starszym kodem, który nie używa generyków.
- Implementacja: Kompilator zastępuje parametryzowane typy ich górną granicą (zwykle
Object) i wstawia niezbędne rzutowania typów. - Ograniczenia:
- Nie można używać typów prymitywnych jako parametrów generycznych (np.
List<int>). - Nie można tworzyć tablic typu parametryzowanego (np.
new List<String>[10]). - Nie można używać operatora
instanceofdo sprawdzania typu parametryzowanego (np.if (list instanceof List<String>)). - Nie można przeciążać metod według typów parametryzowanych, jeśli ich podpisy po usunięciu są takie same.
- Nie można używać typów prymitywnych jako parametrów generycznych (np.
Przykład:
// Kod źródłowy z generykami
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Nie wymaga jawnego rzutowania
// Bytecode po usunięciu typów
List list = new ArrayList(); // Typ List<String> zastąpiono List
list.add("hello");
String s = (String)list.get(0); // Wstawione niejawne rzutowanie
Pomimo ograniczeń, usuwanie typów jest kluczowym aspektem implementacji generyków w Javie, zapewniając kompatybilność wsteczną.