泛型类型擦除

C#中的泛型,不论是代码中,还是编译后,还是运行期,都是切实存在的。List<String>和List<Int>是两个截然不同的类型,有自己的虚方法表和类型数据,这种实现称为类型膨胀。

Java中的泛型是编译之后就消失了。只在代码中存在。

当泛型遇见重载

  1. public class OverloadTest {
  2.     public void testType(List<String> list) {
  3.     System.out.println("String....");
  4. }
  5.  
  6. public void testType(List<Integer> list) {
  7.     System.out.println("Integer....");
  8. }
  9. }

这连个方法重载是失败的,但是我们知道java的泛型是伪泛型,编译之后类型都被擦除了,因此这段代码不能通过编译,因为String类型和Integer类型被擦除之后,两个方法是一样的。

  1. public class OverloadTest {
  2.     public String testType(List<String> list) {
  3.     System.out.println("String....");
  4.     return "";
  5. }
  6.  
  7. public int testType(List<Integer> list) {
  8.     System.out.println("Integer....");
  9.     return 1;
  10. }
  11. }

虽然返回值不能作为方法签名,但是这两个方法是可以编译通过的。这是java编译器的特殊处理。因为在class文件格式中,只要描述符不是完全一致的两个方法就可以共存。也就是两个方法如果有相同的名称和特征签名,但是返回值不同它们就可以合法的共存于一个class文件之中。

最新文章

  1. C#基础-MD5验证
  2. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
  3. git stash和git stash pop
  4. 发布一个简单的knockout-easyui绑定库
  5. ASA与PIX的区别
  6. jquery之营销系统(补偿记录)
  7. B2C 电商网站需要怎样的 ERP 系统
  8. centos下安装jenkins
  9. Spark:scala集合转化为DS/DF
  10. [LeetCode] Find Duplicate File in System 在系统中寻找重复文件
  11. LeetCode之“动态规划”:Dungeon Game
  12. 神经网络_线性神经网络 1 (Nerual Network_Linear Nerual Network 1)
  13. scrpy-cookie
  14. 14.vue路由&amp;脚手架
  15. 初学HTML-7
  16. canvas-arc.html
  17. etcd raft如何实现leadership transfer
  18. flask 单个页面多个表单(单视图处理、多视图处理)
  19. 修改vs2012 颜色
  20. 20155334 曹翔 Exp2 后门原理与实践

热门文章

  1. kernel function
  2. 通过wscript运行的JS脚本,如何引入另一个JS文件
  3. April.Util更新之权限
  4. 【VS开发】动态创建ActiveX控件
  5. Angular5 tslint错误:The selector of the component “XXXComponent” should be used as element
  6. oracle 11g sqlplus和plsql developer 乱码解决方案
  7. python 有参数的装饰器
  8. Ubuntu 19.04
  9. Luogu P1948 [USACO08JAN]Telephone Lines
  10. js汉字转换为拼音