1.泛型概述
*泛型:标签
*泛型的概念:所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型,这个类型参数将在使用时确定
2.泛型举例
*不使用泛型:
*使用泛型:
*泛型的嵌套:
3.自定义泛型类/接口
*自定义泛型类/接口的注意点
(1)泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。比如:
(2)泛型类的构造器如下:public GenericClass(){}。
而下面是错误的:public GenericClass
(3)实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。
(4)泛型不同的引用不能相互赋值。尽管在编译时ArrayList
(5)泛型如果不指定,将被擦除,泛型对应的类型均按照Object处理,但不等价于Object。经验:泛型要使用一路都用。要不用,一路都不要用。
(6)如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象。
(7)jdk1.7,泛型的简化操作:ArrayList
(8)泛型的指定中不能使用基本数据类型,可以使用包装类替换。
(9)在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型、非静态方法的参数类型、非静态方法的返回值类型。但在静态方法中不能使用类的泛型。
(10)异常类不能是泛型的
(11)不能使用new E[]。但是可以:E[] elements = (E[])new Object[capacity];参考:ArrayList源码中声明:Object[] elementData,而非泛型参数类型数组。
(12)父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型
4.自定义泛型方法
*泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系(泛型方法所属的类是不是泛型类都没有关系)
*泛型方法举例:
5.泛型的继承关系
*虽然A是B的父类,但G和G二者不具备父子类关系,二者是并列关系
6.通配符
6.1通配符的使用
*通配符:?
6.2使用通配符不能向其内部添加数据 6.3有限制条件的通配符的使用