泛型的学习
泛型的概念
1.泛型提供了编译时类型的安全监测机制,该机制允许我们在编译时监测到非法的类型数据结构
2. 泛型的本质就是参数类型化,也就是所操作数的数据类型被指定为一个参数
泛型的例子
泛型的好处
- 编译期间检查类型,提高了类型安全
- 减少了数据类型转化
泛型类
- 泛型类的定义
-
泛型类的使用
类名<具体的数据类型>对象名=new类名<>();
-
泛型的注意事项
- 泛型类在创建对象的时候,没有指定类型,将按照object类型来操作
- 泛型类,不支持基本数据类型
泛型类的使用—抽奖系统
从泛型类派生子类
-
子类也是泛型类,子类与父类的泛型类型要一致。
-
子类不是泛型类,父类要明确泛型的数据类型。
-
使用
泛型接口
-
实现泛型接口的类,不是泛型类,需要明确实现泛型类接口的数据类型
-
泛型接口的实现类,是一个泛型类,那么要保证实现接口的泛型类泛型标识包含泛型接口的泛型标识
-
运行结果
泛型方法
泛型方法: 是在调用方法的时候指明泛型的具体类型
-
泛型方法的定义
修饰符<T,E,.....>返回值类型 方法名(形参列表){ 方法体... }
-
注意事项
- public与返回值中间非常重要,可以理解为声明此方法为泛型方法
- 只有声明了的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
- 声明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T
- 与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T,E,K,V等形式的参数常用于表示泛型
-
实例
-
调用多个泛型类型静态类型方法
-
泛型可变参数的定义
类型通配符
- 类型通配符一般是用"?"代替具体的类型实参
- 所以,类型通配符是类型实参,而不是类型形参
-
类型通配符的上限
类/接口<? extends 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的子类类型 -
类型通配符下限
类/接口<? super 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的父类类型