泛型是指可以为引用类型数据指定参数(参数化类型的能力),也就是说为所操作的数据类型指定为一个参数,在编译阶段编译器会用具体的类型来代替这个参数
泛型的主要目的是提高Java程序的类型安全,通过知道使用泛型定义的变量的类型限制,编译器可以提前验证类型假设
消除源代码中许多强制类型转换,使得代码更加可读,并且减少了出错机会
泛型为优化JVM提供了可能,在泛型的实现方式中,支持泛型(几乎)不需要更改JVM或文件,所有类型擦除都在编译器中完成,最后生成没有泛型类型的字节码文件
定义泛型语法:
【访问符】 class 类名<类型参数列表>{
//类体
}
实例化泛型类的语法:
类名<类型参数列表> 对象 = new 类名<类型参数列表>(【构造方法参数列表】)
泛型类型参数就是个占用符,在泛型对象实例化中,把所有占用符利用实例类名替换即可
泛型继承的原则是:所有泛型的类型参数在使用是都能被指定为特定的类型,要么开发者指定要么编译器可以推断出来
泛型继承常用形式:
子类与父类的参数类型一致
class Sub<T>extend Base<T>{}
子类增加了一个泛型参数,父类的泛型参数不能遗漏
class Sub<T,V>extend Base<T>{}
package nt.Fanxing.cm;
class Base<T>{
T data;
public Base(){};
public Base(T data){
this.data=data;
}
void showType(){
System.out.println("Base T:"+data.getClass().getName());
}
}
class Sub<T,V>extends Base<T>{
private T data;
private V type;
public Sub(T data,V type){
super(data);
this.type=type;
}
void showType(){
super.showType();
System.out.println("Sub V:"+type.getClass().getName());
}
}
public class Fanxing {
public static void main(String[] args){
Sub<String, Integer> sub = new Sub<>(new String("XX"), new Integer(99));
sub.showType();
}
}