深入理解JAVA虚拟机 程序编译和代码优化
2024-08-27 20:11:00
泛型类型擦除
C#中的泛型,不论是代码中,还是编译后,还是运行期,都是切实存在的。List<String>和List<Int>是两个截然不同的类型,有自己的虚方法表和类型数据,这种实现称为类型膨胀。
Java中的泛型是编译之后就消失了。只在代码中存在。
当泛型遇见重载
- public class OverloadTest {
- public void testType(List<String> list) {
- System.out.println("String....");
- }
- public void testType(List<Integer> list) {
- System.out.println("Integer....");
- }
- }
这连个方法重载是失败的,但是我们知道java的泛型是伪泛型,编译之后类型都被擦除了,因此这段代码不能通过编译,因为String类型和Integer类型被擦除之后,两个方法是一样的。
- public class OverloadTest {
- public String testType(List<String> list) {
- System.out.println("String....");
- return "";
- }
- public int testType(List<Integer> list) {
- System.out.println("Integer....");
- return 1;
- }
- }
虽然返回值不能作为方法签名,但是这两个方法是可以编译通过的。这是java编译器的特殊处理。因为在class文件格式中,只要描述符不是完全一致的两个方法就可以共存。也就是两个方法如果有相同的名称和特征签名,但是返回值不同它们就可以合法的共存于一个class文件之中。
最新文章
- C#基础-MD5验证
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
- git stash和git stash pop
- 发布一个简单的knockout-easyui绑定库
- ASA与PIX的区别
- jquery之营销系统(补偿记录)
- B2C 电商网站需要怎样的 ERP 系统
- centos下安装jenkins
- Spark:scala集合转化为DS/DF
- [LeetCode] Find Duplicate File in System 在系统中寻找重复文件
- LeetCode之“动态规划”:Dungeon Game
- 神经网络_线性神经网络 1 (Nerual Network_Linear Nerual Network 1)
- scrpy-cookie
- 14.vue路由&;脚手架
- 初学HTML-7
- canvas-arc.html
- etcd raft如何实现leadership transfer
- flask 单个页面多个表单(单视图处理、多视图处理)
- 修改vs2012 颜色
- 20155334 曹翔 Exp2 后门原理与实践
热门文章
- kernel function
- 通过wscript运行的JS脚本,如何引入另一个JS文件
- April.Util更新之权限
- 【VS开发】动态创建ActiveX控件
- Angular5 tslint错误:The selector of the component “XXXComponent” should be used as element
- oracle 11g sqlplus和plsql developer 乱码解决方案
- python 有参数的装饰器
- Ubuntu 19.04
- Luogu P1948 [USACO08JAN]Telephone Lines
- js汉字转换为拼音