Java泛型代码和虚拟机

一些个人的理解:
1.虚拟机没有泛型类型对象—-所有的对象都属于普通类。
2.无论何时定义一个泛型类型,都自动提供了一个相应的原始类型(raw type)。原始类型的名字就是删去类型参数后的泛型类型名。
3.原始类型(分析的原始类型)
Pair<T>的原始类型

//擦除类型变量,并替换为限定类型(原始类型用第一个限定的类型变量来替换,无限定的变量用Object)
public class pair{

    private Object first;
    private Object second;

    public Pair(){
        first = null;
        second = null;
    }

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

    public Object getFirst(){
        return first;
    }

    public Object getSecond(){
        return second;
    }

    public void setFirst(Object newValue){
        first = new Value;
    }

    public void setSecond(Object newValue){
        second= new Value;
    }
}

4.翻译泛型表达式,如果擦除返回类型,编译器插入强制类型转换。

Pair<Employee> buddies = ...;
Employee buddy = buddies.getFirst();

擦除getFirst 方法类型后将返回一个Object类型。编译器会自动插入Employee的强制类型转换。
5.翻译泛型方法(这儿不太明白)

public static <T extends Comparable> T min(T[] a)   //是一个完整的方法族,但是擦除后只剩下一个方法:
public static Comparable min(Comparable[] a)

java泛型转换的事实:
虚拟机中没有泛型
所有的类型参数都用它们的限定类型替换
桥方法被何尝来保持多态为保持类型安全性,必要时插入强制类型转换

—-这个简直就是稀烂的笔记
* 具体参见java核心技术 原书第九版卷一 ch 12.5 P 534

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值