Java 泛型类型擦除
一、泛型的表示形式
1)<>
中的 T、K、V 被称作是类型参数,另外,还可以使用E、S也可做类型参数、
2)通配符<?>:通配符是为了指定泛型中类型范围,包含以下三种形式:
1、<?>
被称作无限定的通配符。
2、<? extends T>
被称作有上限的通配符。
3、<? super T>
被称作有下限的通配符。
二、类型擦除
泛型是 Java 1.5 版本才引进的概念,在这之前是没有泛型的概念的,但显然,泛型代码能够很好地和之前版本的代码很好地兼容。这是因为,泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。通俗地讲,泛型类和普通类在 java 虚拟机内是没有什么特别的地方。回顾文章开始时的那段代码
List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass());
打印的结果为 true 是因为 List<String>
和 List<Integer>
在 jvm 中的 Class 都是 List.class。泛型信息被擦除了。
三、泛型需要注意的地方
泛型类或者泛型方法不支持8种基本数据类型
参考文章:
https://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&mid=2247486903&idx=2&sn=2a22f3b39ad9474199fcc1b4b28493eb&chksm=eb538881dc240197276892c2247c6240d9b9054e7df9e365e1dece09313ff5aedcc3050bce22&mpshare=1&scene=1&srcid=1004pKSy3S4Phnz1BAsGRoAs#rd
还没有评论,来说两句吧...