丰乐

java的泛型

泛型

1 泛型存在的目的

类型参数化,模板化编程,简化编程

2 泛型的原理

java的泛型参数在运行时会进行类型擦除,擦除后就是object,编译器也会转成object进行编译

那么为啥使用泛型呢?

  1. 更加安全
  2. 更好的可读性

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;   
    }
}

类型参数限定

  1. 上界为某个具体类
  2. 上界为某个接口
  3. 上限为其他类型

简洁的通配符

  1. 只读
  2. 只读
  3. 写入或者比较

通配符类型更加通用简洁,需要注意写类型

4 细节和局限性

泛型类,方法和接口

  1. 基本类型不能使用泛型
  2. 运行时类型不适合泛型
  3. 类型擦除可能引起冲突

类型查除,比如这种

@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

posted on 2021-05-16 20:43  李蝉儿  阅读(58)  评论(0编辑  收藏  举报

导航