我读了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会在上面的行中抛出编译错误。