这是一种桥梁方法吗?

时间:2015-03-19 14:35:24

标签: java generics

为什么可以使用两个具有相同签名的方法编译类? "富"方法只有不同的回报类型 但是返回类型不是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,混合模式)

1 个答案:

答案 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