以下是代码示例:
public class TypeErasure<X extends String>{
private X data;
public TypeErasure(String s){
this.data = s;
}
根据我的说法,在类型擦除之后,代码应如下所示:
public class TypeErasure{
private String data;
public TypeErasure(String s){
this.data = s;
}
但我收到编译时错误
Error:(139, 25) java: incompatible types: java.lang.String cannot be converted to X
一旦完成类型擦除,关于X的信息就会丢失,为什么编译器会抱怨?
答案 0 :(得分:2)
一旦完成类型擦除,关于X的信息就会丢失,为什么编译器会抱怨?
您的观察结果回答了您的主要问题:
在Java编译器进行类型检查之前是否完成了类型擦除?
显然,类型检查在类型被删除之前发生, 这就是为什么你会收到错误。
您可以在相关documentation的小节中了解更多相关信息。
另见this other answer主题。