通过List<>重载java方法

时间:2014-12-01 11:42:17

标签: java collections overloading

我有代码,其中方法覆盖List<>个参数

RetrunType1 func(List<Type1> arg);
ReturnType2 func(List<Type2> arg);

和Type1!= Type2,但该代码在jdk1.6.0_45上编译并正常工作。我知道这个样本没有编译和工作。我怎么能理解这个?

2 个答案:

答案 0 :(得分:4)

这是由于type erasure。泛型类型参数不会遵循字节代码,因此如果您建议的重载是合法的,则最终会在字节代码中出现名称冲突:

ReturnType1 func(List arg);
ReturnType2 func(List arg);

解决方案是为函数使用不同的名称。

它在Java 6中起作用的原因是由于{7}在Java 7中已得到修复。

答案 1 :(得分:0)

这里的问题是类型擦除,您可以阅读here。但是,简短版本是Java编译器将删除泛型参数,以使字节代码与以前的Java版本兼容。所以这两种方法都有签名

RetrunType1 func(List arg);
ReturnType2 func(List arg);

因此对于Java来说,这些功能看起来几乎相同。