1.泛型类可能有多个参数,此时应将多个参数一起放入尖括号内。如:
<E1,E2,E3>
2.泛型类的构造器如下:public GenericClass(){}
而下面是错误的:public GenericClass<E>(){}
3.实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致.
4.泛型不同的引用不能相互赋值
>尽管再编译时ArrayList<String>和ArrayList<Integer>是两种类型,但是,在运行时只有一个 ArrayList被加载到JVM中。
5.泛型如果不指定,将被擦除,泛型对应的类均按照Object处理,但不等价与Object。经验:泛型要用一路都用,要不用一路都不要用。
6.如果泛型类是一个接口或者抽象类,则不可创建泛型类的对象。
7.jdk1.7,泛型的简化操作:ArrayList<Fruit>flist = new ArrayList<>();
8.泛型的指定中不能使用基本数据类型,可以使用包装类替换。
9.在类/接口上生名的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型、非静态方法的参数类型、非静态方法的返回值类型。但在静态方法中不能使用 类的泛型。
10.异常类不能是泛型的。
11.不能使用new E[]。但可以:E[] elements = (E[]) new Object[capacity]
参考:ArrayList源码中声明:Object[] elementData,而非泛型参数类型数祖。
12.父类型有泛型,子类型可以选择保留、部分保留、不保留、自定义新泛型(实际上就是没有限制)