JAVA中泛型的本质
来源:互联网 发布:妖夜慌踪 知乎 编辑:程序博客网 时间:2024/06/14 16:10
以下的内容需要一点点JAVA反射的知识,建议各位小伙伴可以先看一下我的浅析JAVA反射机制(如果实在不想看的话看懂下面的内容应该也不会有大问题,可能会有一点理解困难)。
我们先来看一个程序:
AyyayList<String> a = new ArrayList<String>();a.add("hh");a.add(20);
显而易见,a.add(20)是一个错误的操作,由此引出泛型的基本作用就是防止错误的输入。
再看这个程序:
AyyayList<String> a = new ArrayList<String>();ArrayList b = new ArrayList();a.add("hh");Class c1 = a.getClass();Class c2 = b.getClass();
各位小伙伴们猜一猜c1 == c2的结果是什么?
答案是true,为什么呢?因为所有反射的操作都是在运行时的,c1 == c2既然为true,那么就很好的证明了编译之后,程序会采取去泛型化的措施,也就是说JAVA中的泛型,只在编译阶段有效。
我们通过反射来进行验证(为了使逻辑清晰,去掉了异常处理):
AyyayList<String> a = new ArrayList<String>();ArrayList b = new ArrayList();a.add("hh");Class c1 = a.getClass();Class c2 = b.getClass();Method me = a.getMethod("add",Object.class);me.invoke(a,100);System.out.println(a);
me.invoke(a,100);是正确的,因为绕过了编译阶段也就绕过了泛型,最后输出[hh,100]
1 0
- JAVA中泛型的本质
- Java中泛型的本质
- java中泛型的本质
- Java中泛型的本质
- C#和java中泛型的本质区别
- Java线程中断的本质
- Java中enum的本质
- 数组的本质(Java)
- JAVA实例化的本质
- Java面向对象的本质
- JAVA、OC的内存管理机制的本质
- Java语言接口与继承的本质
- java中将对象作为参数的本质
- 方法学之Java的本质
- Java中断的本质与分析
- Java中static块的本质
- 引用的本质是什么(c++,c#,java)?
- java中将对象作为参数的本质
- C++基础---编译过程浅析
- Android 官方命令深入分析之android
- 八皇后问题
- 中国大学MOOC-翁恺-C语言程序设计习题集 08-2 到 10-2
- MVP设计模式的应用
- JAVA中泛型的本质
- C++基础---“Hello Wolrd”程序
- Android官方命令深入分析之AVD Manager
- 封装 链表
- 一个题目做了好久,java,想说爱你不容易!
- C. New Year Snowmen --优先队列
- 手机安全卫士------查询号码归属地
- [Leetcode]Kth Smallest Element in a BST
- PHP学习 - 获取字符串子串