Java泛型与泛型擦除

目录

    • 目录
    • Java泛型
    • 泛型擦除
    • 方法重载与方法签名

Java泛型

泛型是JDK1.5的一项新增特性,它的本质是参数化类型应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可被应用于类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。在泛型出现之前,Java是通过Object是所有类型的父类和类型强制转换这两个特性来实现类型泛化的。

泛型擦除

Java语言中泛型只存在于程序源码中,在编译后的字节码(.class)文件中,就已经替换为原来的原生类型(也叫裸类型)了,并且在相应的地方插入了强制转换类型的代码,因此,对于运行期的Java语言来说,ArrayListArrayList就是同一个类,所以泛型技术实际上是Java语言的一个语法糖,这种泛型实现方法称为类型擦除,又叫做伪泛型。
泛型擦除前:

public static void main(String[] args) {
        Map map = new HashMap();
        map.put("hello","hello");
        map.put("value","value");
        System.out.println(map.get("hello"));
        System.out.println(map.get("value"));
    }

把这段代码编译成class文件,然后再反编译后,会发现泛型不见了,泛型类型都变成了原生类型,在使用的地方进行强制转换,如下:

public static void main(String[] args) {
        Map map = new HashMap();
        map.put("hello","hello");
        map.put("value","value");
        System.out.println((String) map.get("hello"));
        System.out.println((String) map.get("value"));
    }

方法重载与方法签名

方法重载要求方法具备不同的特征签名,返回值不包含在方法的特征签名中,所以返回值不参与重载选择。但是Java语言和字节码中,方法签名的标准不同,Java代码中的方法签名只包含方法名称、参数顺序及参数类型,而在字节码中的方法签名还包括返回值及受查异常表部分。

你可能感兴趣的:(java)