Java 泛型类型擦除

深藏阁楼爱情的钟 2022-05-05 14:56 434阅读 0赞

一、泛型的表示形式

1)或者:尖括号 <> 中的 T、K、V 被称作是类型参数,另外,还可以使用E、S也可做类型参数、

2)通配符<?>:通配符是为了指定泛型中类型范围,包含以下三种形式:

1、<?> 被称作无限定的通配符。

2、<? extends T> 被称作有上限的通配符。

3、<? super T> 被称作有下限的通配符。

二、类型擦除

  1. 泛型是 Java 1.5 版本才引进的概念,在这之前是没有泛型的概念的,但显然,泛型代码能够很好地和之前版本的代码很好地兼容。这是因为,泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。通俗地讲,泛型类和普通类在 java 虚拟机内是没有什么特别的地方。回顾文章开始时的那段代码
  2. List<String> l1 = new ArrayList<String>();
  3. List<Integer> l2 = new ArrayList<Integer>();
  4. 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

发表评论

表情:
评论列表 (有 0 条评论,434人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java类型

    类型擦除: Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次

    相关 java

    前言 本文讲从字节码层面深度学习泛型,这也是大厂常见面试 我们定义了如下类图所示类: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5

    相关 Java-类型

    Java泛型-类型擦除 一、概述 Java泛型在使用过程有诸多的问题,如不存在List.class, List不能赋值给List(不可协变),奇怪的ClassCastE

    相关 Java类型

    类型擦除详解: [来自CSDN的一篇我认为最好的讲解类型擦除的文章][CSDN]. 个人补充: 泛型擦除是指Java 编译后的字节码中已经没有泛型的任何信