【发布时间】:2016-11-28 01:27:30
【问题描述】:
这是一个代码示例:
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 的信息就会丢失,那么为什么编译器会报错呢?
【问题讨论】:
-
您将
X声明为String的子类型,然后将String分配给该子类型的字段。这不是类型擦除的问题... -
String 是最终类。 “X 扩展字符串”如何有效?
-
我不明白为什么它不是类型擦除。编译器不会把X换成String吧?
-
@Amit No. 类型擦除意味着编译后,
X被Object替换。 -
@ElliottFrisch 这回答了我的问题。谢谢。
标签: java type-erasure