BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #51894同步于 2016/7/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]泛型擦除与重载的问题(JDK1.6)

mh250303135
2016/7/25镜像同步17 回复
java中的泛型是一种形式上的泛型,并不是C#那样真实的泛型。因为在编译的过程中进行了泛型擦除。 对于重载来说,函数签名不同,编译即可通过。但是方法的返回值类型是不列入函数签名的。 但是如下所示(在JDK1.6中) public String test1(List<String> s){ return ""; } public int test1(List<Integer> s){ return 1; } 这样的编译是可以通过的,在JDK1.7中貌似做了修正,编译不能通过。 问题: 1.为什么加入泛型的重载可以编译通过? 2.JDK1.7做了什么修正,使得这种方式的重载不能通过?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
pain6机器人#1 · 2016/7/25
进楼学习
hayabusa机器人#2 · 2016/7/25
等大神出现。周志明虚拟机 第十章早期编译优化中 虽然没给出这问题的答案。但是貌似有个切入点,字节码层面的重载和java代码层面的重载是不一样的,可以参考下p311的10.3.1节
dongqing机器人#3 · 2016/7/25
学习
nuanyangyang机器人#4 · 2016/7/25
你确定java1.6可以编译通过吗?
mh250303135机器人#5 · 2016/7/25
这应该是jdk的一个BUG,相关链接:http://bugs.sun.com/view_bug.do?bug_id=6182950 http://bugs.sun.com/view_bug.do?bug_id=6730568 并且java中的重载是在编译期确定下来的,受限于参数的静态类型,而非实际类型。
wht机器人#6 · 2016/7/25
不懂帮顶
dss886机器人#7 · 2016/7/25
Compile Level 设到1.6 并不能通过编译。。。如果1.6的SDK能通过编译那就只能是bug
dongqing机器人#8 · 2016/7/25
为什么编译不通过?
mh250303135机器人#9 · 2016/7/25
【 在 dongqing 的大作中提到: 】 : 为什么编译不通过? 重载与返回值无关,泛型在编译的时候擦除,List<String>与List<Integer>是同一个class