为什么可以使用两个具有相同签名的方法编译类? "富"方法只有不同的回报类型 但是返回类型不是java中方法签名的一部分 在这种情况下,java编译器是否会创建桥接方法? 如果是 - 真正的代码将如何?
foo方法有以下警告:
方法foo(GenClass)具有与foo相同的擦除foo(GenClass) 类型测试中的另一种方法
如果取消注释bar方法,则bar方法会出现以下错误:
方法栏(GenClass)具有相同的擦除栏(GenClass) 类型测试中的另一种方法
class GenClass<T> {
}
public class test {
public static void main(String[] args) {
}
public static Integer foo(GenClass<Integer> criteria) {
System.out.println("Integer");
return null;
}
public static String foo(GenClass<String> criteria) {
System.out.println("String");
return null;
}
/*public static void bar(GenClass<Integer> criteria) {
System.out.println("Integer");
}
public static void bar(GenClass<String> criteria) {
System.out.println("String");
}*/
}
D:\ tools \ java \ jdk1.6.0_37_32 \ bin&gt; java -version
java版本&#34; 1.6.0_38&#34;
Java(TM)SE运行时环境(版本1.6.0_38-b05)
Java HotSpot(TM)64位服务器VM(内置20.13-b02,混合模式)
答案 0 :(得分:7)
javac Java 6中有一个错误使得这个工作成功,但Java 7的其他Java编译器以及Java 7+中的Java编译器都会抛出编译错误。
有关详细信息,请参阅此其他帖子:
Does a method's signature in Java include its return type?
http://vanillajava.blogspot.co.uk/2011/02/with-generics-return-type-is-part-of.html
修改强>
@Radek在评论部分发布了另一篇优秀的Stackoverflow帖子:
Method has the same erasure as another method in type
编辑2 我想我在这里找到了错误票: http://bugs.java.com/view_bug.do?bug_id=6182950