JDK5中支持. 泛型只支持引用数据类型.为什么?请看下面:

cfe2dc5a078d3805aebee252a5f393e6_MD5

所有的数据被存的时候都是以Object存储.

cb324a901af3ba7c6949652de0756f6d_MD5

Java的泛型是伪泛型.它只是帮助编译器做类型检查. 刚才如果我们用ArrayList<String> list = new ArrayList<>();,然后往其中add 字符串,但实际上存储的仍然是Object.只是我们取出当中的元素的时候,会自动帮我们强转成String.(可见后面是怎么”自动”的)

如果我们查看class文件,会发现全部都是ArrayList list = new ArrayList(); 也就是说,底层不是真正的泛型,只是泛型帮助编译器做检查而已. 泛型会在编译过后,在class文件当中消失.这叫做”泛型擦除”

为什么?因为JDK5以前是没有泛型的.如果不采用泛型擦除,那么JDK5以前的老代码就不能和之后的代码兼容了.

按照上面的逻辑,我们ArrayList

list = new ArrayList<>(); 然后list中add子类对象也是可以的.


泛型类

16478c80cadf960706bf5886fff096ed_MD5

E:element T:type

98301a71eecaafce29c706ca3a2e201a_MD5


使用:

aae572cfe321b23ca4ceac48e3ad0da2_MD5


泛型方法

db84b1aeeabbe0e0393ee9ffcc546bf0_MD5