Итак, у java есть стирание типа, которое удаляет аргументы типа (во время выполнения не существует общих типов). Может ли кто-нибудь объяснить, почему аргументы типа супертипа сохраняются?
class StringList extends ArrayList<String> {
public Type getType() {
Type[] typeArguments = ((ParameterizedType) this.getClass()
.getGenericSuperclass()).getActualTypeArguments();
return typeArguments[0];
}
}
Что это означает в основном:
new ArrayList<String>()// I cannot use reflection to find out the generified type String
но
new StringList()//I can use reflection to see the generic type String
Таким образом, стирание типа для обратной совместимости, но почему аргументы типа супертипа сохраняются? Обновлены ли метаданные для его поддержки?
Почему один, а не другой?