Java-泛型编程-类型擦除(Type Erasure)

本文探讨了Java中的泛型编程,特别是类型擦除的概念。通过举例说明,如Comparable接口在泛型中的应用,并指出正确使用泛型的方法。同时,介绍了使用Jad工具进行反编译以理解编译器在泛型处理过程中的操作。
摘要由CSDN通过智能技术生成
Java中的泛型代码和C++中的模板有一个很大的不同:C++中模板的实例化会为每一种类型都产生一套不同的代码,这就是所谓的代码膨胀。
Java中并不会产生这个问题。虚拟机中并没有泛型类型对象,所有的对象都是普通类。

虚拟机中的泛型转换需要记住4条事实:
1) 定义任何一个泛型都会自动产生其原始类型(raw type)
2) 这个过程中,泛型类型会被擦除,替换为其限定类型(bounding type)
3) 必要时插入强制转换来保证类型安全
4) 使用桥接方法(bridge method)来保证正确处理多态


例如写一个返回数组中最小值的泛型函数,可以如下定义。
public static <T extends Comparable> T min(T[] a)

(实际上Comparable也是一个泛型接口,所以最正确的定义方法是public static <T extends Comparable<? super T>> T min(T[] a)  )


类型擦除后,替换为限定类型Comparable,其原始类型就是
public static Comparable min(Comparable[] a)

如果没有限定类型,那么类型擦除后就替换为Object。例如一个Pair<T>类
public class Pair<T> {
    private T first;
    private T second;

    public Pair(T first, T second) {
        this.first = first;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值