НО, если я приведу тип к его супертипу, он будет работать нормально (с предупреждением).
Ну, он также будет "работать нормально" (в зависимости от внутреннихtestStuff
) если вы делаете
testStuff(String::class.java as Class<Bag<Int>>)
Из-за стирания типа Class<String>
может быть приведено к Class<Anything>
, и это относится и к другим универсальным типам.Но на самом деле IntBag::class.java
является Class<IntBag>
, а не a Class<Bag<Int>>
.
На самом деле, нет значений типа Class<Bag<Int>>
;если вы хотите Class<any subtype of Bag<Int>>
, то ответ Памелы Хилл дает синтаксис.