因为泛型的擦除(erasure),任何在运行时需要知道确切类型信息的操作都将无法工作。
public class Erased {
private final int SIZE = 100;
public static void f(Object arg){
if (arg instanceof T){} // error
T var = new T(); // error
T[] array = new T[SIZE]; // error
T[] array = (T[])new Object[SIZE]; // unchecked warning
}
请看上述代码,"arg instanceof T",编译器会认为写这段程序的人是想检查arg是否为某一个类。但是erasure导致这个人的愿望落空,所以就把这段语句置为error。
原文:http://my.oschina.net/u/2291753/blog/464044