我有一个类:
public class SomeClass <TView extends View>{
private TView tv;
public SomeClass(View v){
tv=(TView) v; //unchecked cast warning
}
}
View
是一个具体的类(不是抽象的,不是接口(interface))。
问题是
即使 TView
扩展了 View
,为什么我会收到未经检查的转换警告?
最佳答案
在运行时不强制转换。
你的课后- erasure看起来像:
public class SomeClass {
private View tv; // Post-erasure, TView -> View
public SomeClass(View v){ // Post-erasure, TView -> View
tv=(View) v; //unchecked cast warning due to cast of View to View
}
}
请注意,删除后,构造函数正在转换类型为 View
的值输入 View
因为这是 <TView extends View>
的下限.
类型转换 View
至 View
不会在运行时检查任何内容,这就是您收到警告的原因。
关于java - 未经检查的类型转换和泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218238/