В настоящее время я изучаю java generics, а ниже приведен список типов в Java, которые не поддаются восстановлению.
Тип не может быть повторно идентифицирован, если он является одним из следующих:
• переменная типа (такая как T
)
• Параметрированный тип с фактическими параметрами (такими как List<Number>, ArrayList<String>, or Map<String, Integer>
)
• Параметрированный тип с привязкой (например, List<? extends Number> or Comparable<? super String>
)
Я понимаю, почему параметризованный тип с фактическим параметром и параметризованным типом с привязкой является недопустимым, потому что после стирания во время работы единственная информация о типе слева - это List
, но почему переменная типа (например, T
) является невосстанавливаемым типом? Я думал, что во время выполнения, после стирания типа, T
станет Object
(если T
является параметром несвязанного типа), поэтому информация типа доступна.
Что-то не так с моим пониманием?