是否在Java编译器进行类型检查之前完成了类型擦除?

时间:2016-11-27 16:23:57

标签: java type-erasure

以下是代码示例:

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的信息就会丢失,为什么编译器会抱怨?

1 个答案:

答案 0 :(得分:2)

  

一旦完成类型擦除,关于X的信息就会丢失,为什么编译器会抱怨?

您的观察结果回答了您的主要问题:

  

在Java编译器进行类型检查之前是否完成了类型擦除?

显然,类型检查在类型被删除之前发生, 这就是为什么你会收到错误。

您可以在相关documentation的小节中了解更多相关信息。

另见this other answer主题。