泛型类的定义语法:
class 类名 <泛型标识,泛型标识,....>{
Private 泛型标识 变量名;
....
}
常见的泛型标识T,E,K,V
java
public class GenericDemo<T> {
private T key;
public GenericDemo(T key) {
this.key = key;
}
}
泛型类的使用方法:
类名<具体的数据类型,具体的数据类型,...> 对象名 = new 类名<具体的数据类型,具体的数据类型,...>
jdk1.7之后,后边的<>中具体的数据类型可以忽略不写
//泛型类在创建对象的时候来指定具体的数据类型
GenericDemo<String> stringGeneric = new GenericDemo<>("hello");
GenericDemo<Integer> stringGeneric = new GenericDemo<>(123);
//总结:泛型的本质是参数化类型,也就是所操作的数据的类型被指定为一个参数
//泛型类在创建对象时,没有指定泛型类,将按照Object类型类操作
GenericDemo generice = new GenericDemo();
泛型不支持基本数据类型,原因是泛型在编译期间会将这个T编译成Object,基本数据类型不能转为Object类型
同一泛型类,根据不同的数据类型创建的对象,本质上是同一类型的
System.out.println(stringGneric.getClass() == integerGeneric.getClass());
//返回true
总结
- 泛型类,如果没有制定具体的数据类型,此时,操作类型是Object
- 泛型的类型参数只能是引用类型,不能是基本类型
- 泛型类型在逻辑上可以看成是多个数据类型,但实际上是相同类型
从泛型类派生子类(2种情况):
- 子类也是泛型类,那子类和父类的泛型类型要保持一致
- 子类不是泛型类型,父类要明确泛型类型
泛型接口的语法定义
Interface 接口名称 <泛型标识,泛型标识,...>{
泛型标识 方法名(泛型标识 参数);
....
}
泛型接口的使用方法
- 泛型接口的实现类是泛型类时,泛型的类型要保持一致
- 泛型接口的实现类不是泛型类时,需要指定具体数据类型