因为泛型的擦除(erasure),任何在运行时需要知道确切类型信息的操作都将无法工作。
public class Erased<T> { 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。
时间: 2024-10-11 01:19:43