jdk源码--范型

来源:互联网 发布:iphone伪装mac地址 编辑:程序博客网 时间:2024/05/21 18:35
范型编程通过参数化的方式将数据处理与数据类型解耦,通过对数据类型进行约束来保证数据处理正确性。
java范型编译成字节码时,类型会在代码中被擦除,记录在Class文件的attribute域内,而在使用范型处做类型检查和类型转换。擦除规则为保留上界。
<T> 擦除后 为Object,<? extends A> 擦除后为A, <? super A> 擦除后变为Object


在定义包含范型的类或者方法时,会使用到范型字母,E或者其他乱七八糟的大些字幕,但是使用前要先定义。一般定义在尖括号中<E>。在类中使用时一般在类名后面跟上范型:class xxx<E>, 在方法中使用时,一般在返回值前定义:private <E> E xxx(){}




定义范型与直接定义Object有啥区别?会有相同校验嘛?譬如:private <E> void generic(E e, E e1) 与 private void generic(Object e, Object e1)在使用上会有所不同嘛?
在类定义时定义范型,然后会在实际使用时才会用到范型的实际类型,而不会在子类中用到范型的实际类型。所以使用范型定义类的时候要考虑到使用时才会指定实际类型。---所以范型方法有使用场景嘛???


使用范型时java编译器会对类型进行检查,所以范型方法也是有作用的,譬如参数和返回值都定义了一个范型,那么就不需要做强制类型转换了。


范型的作用可以从 参数和返回值 入手,一个作用时作为参数传入时作类型检查,另一个作用是返回时可以不用作强制转换。
用法也可以分两类(目前我就知道两类)来看,一个是类的范型,一个是方法的范型。
类的范型是在实例化的时候起作用,实例化之后,类内部使用的各种范型也都确定了。
方法的范型是在调用的时候起作用,参数的范型确定了,返回值的范型也就确定了。