java中的泛型类型擦除

落日映苍穹つ 2022-11-19 12:47 334阅读 0赞

format_png

大家好,我是雄雄,今天给大家分享的是:java的泛型是类型擦除的。

写在前面

那么何为类型擦除?类型擦除就是在编译期明确去掉所编程序的类型系统。啥?还不明白?以java泛型为例,java的泛型在编译期有效,在运行期被删除,下面我们来具体的看看。

先举例一段代码:

  1. public class Test {
  2. public void method(String [] strs){}
  3. public void method(int [] ints){}
  4. public void listmethod(List<String> strList){}
  5. public void listmethod(List<Integer> intList){}
  6. }

以上这段代码很简单,我们写了4个方法,其中method的两个方法的参数类型不一样,listmethod方法的参数类型也不一样,理论上来说,method的两个方法和listmethod的两个方法都可以构成方法重载,但是,这样写对吗?

这样写编译无法通过。报错的地方就在listmethod方法上,报错信息为:

format_png 1

这个错误的意思就是,listmethod方法在编译时擦除类型后为listmethod与另一个方法重复(listmethod),也就是说方法名一样,注意这里的一样是指方法名和参数都一样,故报错。

这就是java泛型擦除类型引起的问题,在编译后所有的泛型都会做出相应的转化,可以总结为如下转换规则:

  • List、List、List擦除后的类型为List。
  • List擦除后的类型为List[]。
  • List<? extends E>、List<? superE>擦除后的类型为List
  • List擦除后的类型为List< Serializable >

看完以上规则之后你是否明白了上面代码为什么会报编译错误呢?

辣椒酱了哈,年底冲销量了,满80减15了,单件商品下单立减1.88元,时间有限!

本文参考自:《编写高质量代码 改善java程序的151个建议》

作者:秦小波

往期精彩

投资理财要趁早,基金风险是最小!

2021-01-10

format_png 2

一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚得几丁?

2021-01-09

format_png 3

你们好好的学,回头教教我~

2021-01-08

format_png 4

辣椒酱中奖说明~

2021-01-07

format_png 5

format_png 6

format_png 7

点分享

format_png 8

点点赞

format_png 9

点在看

发表评论

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

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

相关阅读

    相关 java类型

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

    相关 Java-类型

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

    相关 Java类型

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