这一章节我们讨论一下类型擦除。
1.什么是类型擦除?
在java里面泛型其实是伪泛型,因为他都只是在编译器里面实现的,在jvm里面是没有泛型的概念。
我们看下面的代码:
package com.ray.ch11; import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<Integer>(); ArrayList<String> list2 = new ArrayList<String>(); System.out.println(list1.getClass() == list2.getClass()); } }输出:
true
为什么两个list对应的Class对象是一致的呢?因为在jvm层面,他只看到List,没有里面的类型。
也就是,泛型里面的类型信息被擦掉了,这就是所谓的类型擦除。
2.扩展
我们使用另一个例子来扩展开来。
package com.ray.ch11; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; public class Test { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); HashMap<String, String> map = new HashMap<String, String>(); HashSet<String> set = new HashSet<String>(); System.out .println(Arrays.toString(list.getClass().getTypeParameters())); System.out.println(Arrays.toString(map.getClass().getTypeParameters())); System.out.println(Arrays.toString(set.getClass().getTypeParameters())); } }
输出:
[E]
[K, V]
[E]
从上面的输出,我们只是看见泛型的标记,但是完全不问清楚里面的类型信息,这是因为代码经过编译器后,类型信息被擦除了。
总结:这一章节我们引出类型擦除的概念。
这一章节就到这里,谢谢。
-----------------------------------
目录
顶 0 踩 0
我的同类文章
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
个人资料
raylee2007
积分:4784
文章搜索
博客专栏
从头认识java
文章:109篇
阅读:75448轻松python之设计模式
文章:1篇
阅读:453轻松python之文件专题
文章:7篇
阅读:4124轻松python-文本专题
文章:18篇
阅读:5545数据结构与算法
文章:9篇
阅读:3030java基础学习
文章:31篇
阅读:10465轻松python
文章:155篇
阅读:67378文章分类
文章存档
阅读排行