泛型擦除,教你怎么用可乐瓶装鸡蛋
在学习集合的时候,我们会接触到泛型。利用泛型,可以很好的控制集合中添加的数据。但是深入了解之后,会发现泛型只在编译时期起作用。而运行时期泛型会被擦除。
什么意思呢?举个简单的例子,坐火车要过安检。就相当于泛型的作用就相当于安检。只在进站的时候起作用,而你进去之后通过其它手段拿到了一些违禁品安检也管不到你。
假设已经有类Egg、Coke两个类。分别是鸡蛋、可乐。
先创建一个可乐瓶:
public void demo1(){//创建一个只能装可乐的可乐瓶List<Coke> cokeBottle = new ArrayList<Coke>();
}
然后尝试放鸡蛋进去:
Egg egg = new Egg();
Coke coke = new Coke();
//添加可乐没有问题
cokeBottle.add(coke;)
//放入鸡蛋。这时候,这句代码会报错
cokeBottle.add(egg);
因为泛型的关系,放鸡蛋的代码出错了。那么要怎么才能放鸡蛋呢?我们先获取cokeBottle(可乐瓶)编译后的Class对象:
Class<? extends List> aClass = cokeBottle.getClass();
然后把添加可乐的方法找到:
Method add = aClass.getDeclaredMethod("add", Object.class);
然后再来放鸡蛋:
//因为是使用反射,这个时候泛型已经被擦除了。可以添加任何数据
add.invoke(cokeBottle, egg);
这样就把鸡蛋放进去了,前面的代码是有异常的,大家可以自由抓或者抛。
泛型擦除,教你怎么用可乐瓶装鸡蛋相关推荐
- 十分钟理解Java泛型擦除
泛型信息只存在于代码编译阶段,但是在java的运行期(已经生成字节码文件后)与泛型相关的信息会被擦除掉,专业术语叫做类型擦除. 今天我们来讲解泛型中另一个重要知识点--泛型擦除! 泛型擦除概念 泛型信 ...
- 【Java 泛型】使用上下边界通配符解决泛型擦除问题
文章目录 前言 一.使用上边界通配符示例 二.分析字节码的附加信息 前言 上一篇博客 [Java 泛型]泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通 ...
- 泛型擦除机制、自定义注解、代理、反射
一.泛型擦除机制 1.泛型只在编译阶段限制,之后会擦除. 二.注解 1.注解介绍 2.JDK自带注解 3.元注解 @Target @Retention 转载于:https:// ...
- 什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的
1. 泛型的定义和意义 1.1 什么叫泛型? 泛型,顾名思义就是广泛的类型,专业术语为"参数化类型":当我们创建对象时没指定类型,任何引用类型都可以使用,兼容多种数据类型.如果是基 ...
- 深入理解 Java 泛型擦除机制
我们都知道 Java 中的泛型可以在编译期对类型检查,避免类型强制转化带来的问题,保证代码的健壮性.不同语言对泛型的支持也不一样,Java 中的泛型类型在编译期会擦除,下面一个例子可以证明这一点: p ...
- 什么是泛型、为什么要使用以及泛型擦除
泛型,即"参数化类型". 创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换. Java编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译 ...
- java同事不写泛型_跳了一次JAVA泛型擦除的坑
记录一下今天在帮同事解决使用spring参数注入问题的时候由于对泛型的理解不到位而遇到的坑. 如下代码所示: @RequestMapping(value="saveAll") pu ...
- java 获取泛型_聊聊Java泛型擦除那些事
>版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/89789849 出自:shushen ...
- 才学了泛型,简单说一下我对java泛型擦除和补偿的一些理解
其实Java 的泛型是伪泛型,在JVM运行的时候,所有的泛型信息都会被擦除掉.举个例子,ArrayList<Integer> list,在编译的时候你调用add()方法,只能传入Integ ...
最新文章
- R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)
- Linux——33条小技巧
- 每天一个 Linux 命令(13):less 命令
- 简单的选择排序(内部排序)
- 处理android11以上无法删除相册图片的问题
- TypeScript 里的 unknown 和 never
- 光是无限远服务器有道馆吗,光是无限远服务器客户端
- Spark源码分析之MemoryManager
- 请举例说明python中**运算符的含义_举例讲解Python中的身份运算符的使用方法
- Redis缓存持久化:RDB持久化和AOF持久化
- C#网络Socket编程
- 计算机音乐A谱,WPSOffice谱写音乐简谱
- 【Endnote】CNKI E-Study与Endnote 的参考文献题录互导
- 免费客户旅程(Customer Journey Mapping) 示例总汇
- 商业研究(10):比呀比-海淘电商-海外正品直邮-高品质跨境购物平台
- 小提琴统计图_小提琴图解读 - 统计学
- 买二手房不后悔先知道8件事 高楼层未必卖得好
- 【CCNP | 网络模拟器GNS系列】安装、配置和使用 GNS3
- 生存模型的C-index(C指数)
- Android 10适配要点,作用域存储
热门文章
- 校园服务器系统的意义,浅谈校园网络建设的意义与作用.doc
- python 矩阵特征值_用python求矩阵特征值的方法?
- RequestContextHolder获取request
- MySQL大表传输表空间的坑
- android横向瀑布流布局,GitHub - wikison/android_waterfall: Android版的瀑布流布局
- 文本溢出及其在angular中失效的bug
- 关于 ZAO 换脸 App 中你需要注意的个人隐私问题
- 一个屌丝程序猿的人生(八十一)
- 快手2019秋季校园招聘算法笔试A卷编程题 - 题解
- 求职软件开发工程师,我需要准备什么?一些资源分享