В How Generics works in Java
разделе this он говоритВнутреннего функционирования Типа Erasure в Дженерики
Java компилятору, когда он видит код, написанный с использованием Generics он полностью стирает этот код и скрытый его в необработанный тип т.е. кода без дженерик. Вся связанная с типом информация - удалена во время стирания. Таким образом, ваш ArrayList становится простым старым ArrayList до JDK 1.5, формальные параметры типа, например. или заменяется либо объектом, либо Суперкласс типа.
Мой вопрос касается последней строки - formal type parameters e.g. <K, V> or <E> gets replaced by either Object or Super Class of the Type
.
В каком случае они заменяются Объектом, и в этом случае они заменяются Super Class типа объекта?
Update:
Что происходит, когда у нас есть джокер, как показано ниже?
List<? extends Foo>
Вы проверяете этот ответ от @RohitJain http://stackoverflow.com/questions/18328546/why-cast-to-generic-type-takes-effect/18328627#18328653 – sanbhat
Он говорит ** Стирание неограниченного type является Object, тогда как стирание параметра ограниченного типа является типом, обозначающим верхнюю границу. ** Я не получаю его, вы можете привести пример. –
The? все еще расширяет Foo. Ответы по-прежнему актуальны. – Bex