Java泛型:为什么类型擦除不允许检查泛型的实例

时间:2017-02-12 06:22:55

标签: java generics type-erasure

我读了Java Criticism关于为什么Type erasure使java不如泛型中的某些语言强大的原因。在wiki页面中,这是一个例子:

public class MyClass<E> {
    public static void myMethod(Object item) {
        if (item instanceof E) {  //Compiler error
            ...
        }
        E item2 = new E();   //Compiler error
        E[] iArray = new E[10]; //Compiler error
    }
}

我理解为什么E item2 = new E();应该编译错误,因为在调用它们之前我们真的不知道E类。但我不知道为什么这一行应该是错误的:

if (item instanceof E) {  //Compiler error
   ...
}

因为据我所知,在编译java应用程序时,所有泛型类型都将被其混凝土类型所取代。例如:

// all E will be substituted by Integer 
MyClass<Integer> myObject = new MyClass<Integer>(); 

所以我不认为为什么Java会在上面的行中抛出编译错误。

0 个答案:

没有答案