黑马程序员训练营:泛型

来源:互联网 发布:91淘课网全站下载软件 编辑:程序博客网 时间:2024/05/29 04:48

一、泛型的概念

泛型在本质上是指参数化类型。参数化类型的重要性在于,它们允许创建这样的一些类、接口和方法:其所操纵的数据类型被指定为一个参数。需要注意的是,参数化类型只在编译期间才有意义,即其存在是为编译器更严格的类型检查而服务的,因此它确保了类型安全。

二、泛型中的相关术语

1ArrayList<E>:整体称为泛型类型。

2ArrayList<E>中的E:类型变量或类型参数。

3ArrayList<Integer>:已经用类型实参代替类型变量的整体称为参数化类型。

4ArrayList:称为原始类型。

、泛型通配符:

1限定通配符的上边界:<? extends SupressClass>

2限定通配符的下边界:<? super SubClass>

3<?><T>的区别:

1<?>表示任意一种类型,即为一般。

2<T>表示某一特定类型,即为特殊。

3)特殊可以赋予一般,但一般不能赋予特殊。

4)基于第三条分析,可以用<T>类型参数调用以<?>作为形参的方法,但反之则不行。

四、泛型的限制

1参数化类型与原始类型相兼容:即参数化类型和原始类型的对象之间可以相互引用,但会收到编译器的警告信息。

2参数化类型不考虑类型参数的继承关系:即类型参数之间有继承关系的参数化类型对象之间不能相互引用,但这只是语法上的限制(编译期间),不是逻辑上的限制(运行期间),因此不是绝对的。

3泛型的类型变量只能是类类型,不能是简单类型。

4类型参数不能被实例化。

5、静态成员不能使用封闭类所声明的类型参数,但可以声明静态泛型方法。

6为了类型安全,不能创建一个类型特定的泛型引用的数组。

7、泛型类不能扩展Throwable,这意味着不能创建泛型异常。

8、类型参数限制了对象的操作数据类型,而反射则能够还原出对象的原始类型所提供的方法,进而就放宽了对象的操作数据范围。

、自定义泛型方法

1格式:在方法的返回值前指定类型参数。

2说明:普通方法、静态方法、构造方法都可以使用泛型。方法的类型参数可以使用泛型通配符规则,并且可以使用&运算符指定多个边界。需要特别注意的是,如果在方法体内多处引用同一类型变量,那么类型变量的最终类型将是调用者提供的所有类型实参的最简并集的类型。

、自定义泛型类或接口

1格式:在类名称后类身体前指定类型参数。

2说明:泛型类与泛型方法的区别在于,泛型类的类型变量可以被类对象身上的所有方法引用(静态方法除外),而泛型方法的类型变量在能在方法体内被引用。此外泛型类的类型变量还起到了统一对象方法操作的数据类型的作用。

、通过反射获得参数类型原理

由于运行时参数类型被擦掉,所以无法获得实际的参数类型。但是在Method方法中提供了获得某一方法的参数化类型的方法。只要将参数化类型置于任一方法的参数列表中,即可通过反射此方法而获得其参数的参数化类型信息。

注意:参数化类型不支持方法重载。

原创粉丝点击