标签归档:泛型

Java泛型•约束和局限性

来源:Yuan Shenjian

泛型参数的限制

在Java中,实例化泛型类时泛型参数不能使用基本类型,如List<int>这是不合法的,要存储基本类型则可以利用基本类型的包装类如List<Integer> 、List<Double>等,下面补充一下八种基本类型对应的包装类,和默认初始值

继续阅读

发表在 Java基础 | 标签为 | 留下评论

Java泛型•虚拟机执行泛型代码

来源:Yuan Shenjian

虚拟机中类型擦除

Java虚拟机是不存在泛型类型对象的所有的对象都属于普通类,甚至在泛型实现的早起版本中,可以将使用泛型的程序编译为在1.0虚拟机上能够运行的class文件,这个向后兼容性后期被抛弃了,所以后来如果用Sun公司的编译器编译的泛型代码,是不能运行在Java5.0之前的虚拟机的,这样就导致了一些实际生产的问题,如一些遗留代码如何跟新的系统进行衔接,要弄明白这个问题,需要先了解一下虚拟机是怎么执行泛型代码的。

虚拟机的一种机制:擦除类型参数,并将其替换成特定类型,没有指定特定类型用Object代替,如前文中的Couple类,虚拟机擦除后:

继续阅读

发表在 Java基础 | 标签为 | 留下评论

Java泛型•通配符限定

来源:Yuan Shenjian
引一个例子

考虑一个这样的场景,计算数组中的最大元素。

[code01]

public class ArrayUtil {
    public static <T> T max(T[] array) {
        if (array == null || 0 == array.length) { return null ;}
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (max.compareTo(array[i]) < 0) {max = array[i];}
        }
        return max;
    }
}

 

仔细看看code01里面的代码(代码不完整),使用类型参数T定义一个max局部变量,这几意味着这个max可以是任意的类型,那么max.compareTo(array[i]) 方法的调用的前提是T所属的类中有compareTo方法怎么能做到这一点呢?别着急,让我们来看看如何给类型参数进行限定,现在来对code01中的代码进行完善。

继续阅读

发表在 Java基础 | 标签为 | 留下评论

Java泛型•认识泛型

来源:Yuan Shenjian

什么是泛型

Java从1.0版本到现在的10+,中间Java5中发生了一个很重要的变化,那就是泛型机制的引入。Java5引入了泛型,主要还是为了满足在1999年指定的最早Java规范之一。经过了5年左右的时间,专家组定义了一套泛型规范,实现后通过测试投入到使用。所以说泛型是Java5以后才有的,欲知详情,继续往下看。

为什么用泛型

换个角度想,Java5引入泛型,必定是它能带来好处,否则牛气的Java工程师就要遭到吐槽了。我们来吐槽一下没有泛型的程序是怎么写的。

继续阅读

发表在 Java基础 | 标签为 | 留下评论

泛型的意义和作用是啥?

来源:hexter

简单的说,意义和作用有:

类型的参数化,就是可以把类型像方法的参数那样传递。这一点意义非凡。

泛型使编译器可以在编译期间对类型进行检查以提高类型安全,减少运行时由于对象类型不匹配引发的异常。

泛型方法,算法的复用。蛮神奇的。

继续阅读

发表在 Java基础 | 标签为 | 留下评论