为什么我在重载泛型方法时需要不同的返回类型

时间:2015-03-30 14:09:51

标签: java generics overloading

下面是示例代码,这让我很困惑如果在泛型的情况下java方法重载是如何工作的。

问题是:为什么我需要使用不同的返回类型,以防我使用泛型参数重载方法?

我知道擦​​除删除了<T>而我所拥有的只是List,对于编译器来说它是不明确的,但是不同的返回类型有助于决定调用哪个方法?

public static void main(String args[]) throws Exception {       
        PracticeGenerics p = new PracticeGenerics();
        p.test();
    }



private void test() throws Exception {
        //print(null); //The method print(List<String>) is ambiguous for the type PracticeGenerics
        print(new LinkedList<String>());
        print(new LinkedList<Integer>());
    }


public String print(List<String> list){
        System.out.println("print string");
        return null;
    }

    public Object print(List<Integer> list){
        System.out.println("print Integer");
        return null;
    }

我机器上的Java版本:

java版“1.6.0_31”

Java(TM)SE运行时环境(版本1.6.0_31-b05)

Java HotSpot(TM)64位服务器VM(内置20.6-b01,混合模式)

1 个答案:

答案 0 :(得分:2)

简单地说,重载意味着有两个或更多方法具有相同的名称,但具有不同的签名

方法的签名由方法名称和参数组成。当重载方法时,显然名称将是相同的,这意味着重载方法仅与它们具有的参数列表不同。

return-type与方法重载无关!