Oficjalny poradnik Java na generycznych wyjaśnia typu skasowaniu i dlatego dodano do kompilatora:
Po utworzeniu instancji typu ogólnego kompilator tłumaczy te typy za pomocą techniki zwanej kasowanie typu - proces, w którym kompilator usuwa wszystkie informacje związane z parametrami typu i argumentami typu w klasie lub metodzie. Usuwanie typu umożliwia aplikacjom Java korzystającym z generycznych zachowanie binarnej zgodności z bibliotekami Java i aplikacjami, które zostały utworzone przed generycznymi.
To najprawdopodobniej było podejście pragmatyczne, a może najmniej bolesne. Jednak teraz, gdy leki generyczne są szeroko obsługiwane w branży, co można zrobić, abyśmy nie potrzebowali kasowania czcionek? Czy jest to wykonalne bez konieczności łamania wstecznej kompatybilności, czy jeśli jest wykonalne, czy jest to praktyczne?
Czy ostatnie stwierdzenie w powyższym cytacie stało się samodzielne? To znaczy: „wymazanie typu umożliwia aplikacjom Java korzystającym z generycznych zachowanie binarnej zgodności z bibliotekami Java i aplikacjami, które zostały utworzone za pomocą wersji Java wykonujących wymazywanie”.
Odpowiedzi:
Koniec cyklu życia dotyczy oprogramowania Java Development Toolkit i środowiska Java Runtime Environment. I tylko wersje Oracle (Sun). Nie dotyczy to jednak aplikacji napisanych przez osoby trzecie. Intencją jest, aby nigdy nie łamać kodu, który kiedykolwiek działał na JVM, dlatego jest mało prawdopodobne, że Java kiedykolwiek przestanie wymazywać.
Oczywiście C # wprowadził również generyczne w późniejszej wersji w sposób zgodny z poprzednimi wersjami bez usuwania typu, ale w zasadzie oznaczało to powielenie wszystkich klas kolekcji. Wydaje mi się, że tego nie chcą projektanci Java i dlatego wybrali przede wszystkim wymazanie typu. Bez typów wartości przewaga generycznych nieskasowanych typów nie jest aż tak duża.
źródło
List<int>
że prawdopodobnie spowodowałoby, że obciążenia znacznie bardziej byłyby wydajniejsze niż obecneList<Integer>
.