Java中Generics泛型的功能简介说明
下文笔者讲述Generics泛型的简介说明
Generics泛型的简介
Generics是泛型的英文单词
泛型的核心目的:
参数化类型
将函数的参数进行类型化
泛型的优势
1.泛化:可使用泛型代表任意的类型 2.提高代码的复用性 3.类型安全性,由于泛型是在使用中指定类型,无需强制转换,所以非常安全 4.泛型可提高运行效率,使用泛型可减少对象的装箱和拆箱操作
泛型示例
泛型中常见的变量
T 类型(Type) K 键(Key) V 值(Value)
泛型类设计示例
class GenericsClass<T>{
private T date;
public T getDate(){
return this.date;
}
public void setDate(T date){
this.date = date;
}
}
注意事项:
泛型类的类型参数可以是多个
如<K,V>,<T,K,V>等。
泛型接口
public interface GenericesInterface<T>{
public void setDate(T date);
public T getDate();
}
泛型实现类
class GenericesImpl1 implements GenericesInterface<String>{
@Override
public String getDate(){
return "String";
}
public static void main(String[] args){
GenericesImpl a = new GenericesImpl();
System.out.println(a.getDate());
}
}
class GenericesImpl2<T> implements GenericesInterface<T>{
private T date;
public void setDate(T date){
this.date = date;
}
@Override
public T getDate(){
return date;
}
public static void main(String[] args) {
GenericesImplTwo<String> a = new GenericesImplTwo<>();
a.setDate("String");
System.out.println(a.getDate());
}
}
泛型方法
public <T> void genericesMethod(T date){
System.out.println(date);
}
泛型通配符
上界通配符 <? extents Parent> 可以使用该类及其子类 下界通配符 <? super Child> 可以使用该类及其父类 无限制通配符 <?> 不限制类型
限定泛型类型变量
对类的限定: public class GenericesClass<T extends list & Serializable>{ ...... } 对方法的限定: public static<T extends List>T genericesMethod(T date) { ...... }
泛型擦除
泛型擦除:
指在编译阶段
将泛型替换为他的边界类型
即非限定类型变量替换为Object,
限定泛型类型则替换为第一个边界限定类型
如<T extends ArrayList>中T替换成ArrayList
虚拟机在运行阶段不识别泛型
泛型擦除本质上还是使用了类型的强制转换
不过由于编译阶段已经对数据进行过校验,保证数据的一致性
所以是一种比较安全的转换。
泛型不可协变
Number[] a = new Integer[8]; //正确 List<Number> a = new ArrayList<Integer>; //错误
泛型约束和局限性
泛型类不能实例化 基本数据类型不能作为泛型类型 无法使用instanceof关键字或==判断泛型类的类型 泛型类不能继承Exception或者Throwable 泛型参数是继承关系的泛型类之间是没有继承关系的
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


