所谓的泛型,就是允许在定义类,接口时通过一个标识表示类中某个属性的类型或者时某个方法的返回值及参数类型
二、集合中泛型的使用
1.集合接口或集合类在jdk5.0都修改为带泛型的结构
2.在实例集合类时,可以指明具体的泛型类型
3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法,构造器,属性等)使用到类的泛型的位置,都指定为实例化泛型类型
4.注意点:泛型的类型必须是类,不能是基本数据类型。需要用到基本数据类型的位置,拿包装类替换
5.如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object
三、自定义泛型类
1.泛型类ke能由多个参数,此时应将多个参数一起放到尖括号内:比如<E1,E2,E3>
2.泛型类的构造器如下:public GenericClass(){}。
3.实例化过后,操作原来泛型位置的结构必须与指定的泛型类型一致
4.泛型不同的引用不能相互赋值
尽管在编译时ArrayList和ArrayList是两种类型,但是,在运行时只有一个ArrayList被加载到JVM中。
5.泛型如果不指定,将被擦除,泛型对于的类型均按照Object处理,但不等家于Object
6.如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象
7.jdk1.7,泛型的简化操作:ArrayListflist=newArrayList<>()。
8泛型的指定中不能使用基本数据类型,可以使用包装类替换
9.在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型,非静态方法的参数类型,非静态方法的返回值类型。但在静态方法中不能使用类的泛型
10.异常类不能是泛型的
11.不能使用new E[]。但是可以:E[]elements(E[])new Object[capacity]
参考:ArrayList源码中声明:Object[]elementData,而非泛型参数类型数组
12.父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型
四、泛型方法
1.方法,也可以被泛型化,不够此时定义在其中的类是不是泛型类。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据类型。
五、泛型在继承方面体现
1.虽然类A是类B的父类,但是G和G二者不具备子父类关系,二者是并列关系。
补充:类A是类B的父类,A
六、通配符的使用
有限制条件的通配符号使用
1.extends A:
G<?extends A>可以作为G< A >和G的父类,其中B是A的子类
2.?super A:
G<?super B>可以作为G< A>和G的父类,其中B是A的父类
发工具与关键技术: Java