java的泛型
泛型
1 泛型存在的目的
类型参数化,模板化编程,简化编程
2 泛型的原理
java的泛型参数在运行时会进行类型擦除,擦除后就是object,编译器也会转成object进行编译
那么为啥使用泛型呢?
- 更加安全
- 更好的可读性
3 泛型的使用
最常用的容器类比如List
泛型类
class Pair2<U, T>{
private U u;
private T t;
Pair2(U u, T t){
this.u = u;
this .t = t;
}
}
泛型方法
public <T> A test(T t, T t2){
}
泛型接口
interface Comparable<T>{
int commpareTo(T o);
}
class TestComparableImpl implements<Interger>{
public int commpareTo(T o){
return 0;
}
}
类型参数限定
- 上界为某个具体类
- 上界为某个接口
- 上限为其他类型
简洁的通配符
- 只读
- 只读
- 写入或者比较
通配符类型更加通用简洁,需要注意写类型
4 细节和局限性
泛型类,方法和接口
- 基本类型不能使用泛型
- 运行时类型不适合泛型
- 类型擦除可能引起冲突
类型查除,比如这种
@Data
class Base implements Io<Base>{
private int id;
@Override
public void say(Base t){
System.out.println("base:"+t.getId());
}
}
class Child extends Base{
@Override
public void say(Base t){
if(! (t instanceof Child)){
return;
}
System.out.println("child:"+t.getId());
}
}
不能通过new T()创建对象或者数组
泛型支持多个上界 T extends a & b & c