java泛型详解

1.泛型的使用

1.类的使用
在java库中使用变量E表示集合的元素类型,K和V表示表的关键字和值的类型,T,U,S表示任意类型

public class Pair<T> {

    private T first;
    private T second;

    public Pair() {
       first = null;
       second = null;
    }
    public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public T getSecond() {
        return second;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public void setSecond(T second) {
        this.second = second;
    }

2.方法的使用
定义泛型 放在返回值的前面

public static <T> Pair<T> makePair(Supplier<T> constr) {
        return new Pair<>(constr.get(), constr.get());
    }
2.限定类型

1.对类型变量加以约束 绑定类型
例如

<T extends Manage> 表示泛型T只能是Manage的子类型
Manage可以是类也可以是接口

2.一个类型变量可以有多个限定 用&连接

T extends Manage & User
限定中最多有一个类 且放在第一个
3.泛型的擦除

1.泛型会自动提供一个原始类型,原始类型的名字就是删掉泛型的类型名。擦除限定类型,并替换为限定变量
例如

Pair<String> 的原始类型名是Pair
里面的限定变量T变为String 例如:
public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }
 替换为
 public Pair(String first, String second) {
        this.first = first;
        this.second = second;
    }
Pair<Integer>的原始类型名也是Pair
里面的限定变量T变为Integer
如果没有给限定变量如
Pair<T>的原始类型名也为Pair
public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }
 替换为
 public Pair(Object first, Object second) {
        this.first = first;
        this.second = second;
    }

2.编译器的实际操作
例如 Pair中的get方法

1.调用原始的get的方法
public Object getFirst() {
        return first;
    }
 2.将返回值object类型强制转换为例如Pair<String> 转换为String类型
 public String getFirst() {
        return first;
    }
4.注意要点

1.不能用类型参数代替基本类型
2.不能创建参数化类型的数组
3.泛型的静态上下文中类型参数无效
4.不能抛出捕获上下文的实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值