Java 泛型类型擦除

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chao821/article/details/83120231

一、泛型的表示形式

1)<T>或者<E,V>:尖括号 <> 中的 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

猜你喜欢

转载自blog.csdn.net/chao821/article/details/83120231