泛型限制与局限性

1.不能使用基本类型代替类型参数,因为基本数据类型么有继承自Object。

ArrayList<int> //错误
ArrayList<Integer> // ok

2.运行时查询只适用于原始类

if (order instanceof Order<Integer>) {  // error
}
if (order instanceof Order<T>) {  // error
}
if (order instanceof Order) {  // ok
}

3.不能创建参数化类型的数组

Order<Long>[] orders = new Order<Long>[10]; // error
Order<String >[] orders = (Order<String>[]) new Order[10];  // ok

4.泛型不同的引用不能相互赋值。

ArrayList<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(12);

ArrayList<Long> longs = new ArrayList<>();
longs.add(23L);
longs.add(1L);

longs = integers;  // error
integers = longs;  // error

5.不能实例化类型变量

T o = new T(); //error

6.不能构造泛型数组

T[] = new T[];  //error