Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重载泛型方法时为什么需要不同的返回类型_Java_Generics_Overloading - Fatal编程技术网

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

Java 重载泛型方法时为什么需要不同的返回类型,java,generics,overloading,Java,Generics,Overloading,下面是示例代码,这让我对泛型中java方法重载的工作原理感到困惑 问题是:如果我用泛型参数重载方法,为什么需要有不同的返回类型 我知道erasure remove,我所拥有的只是列表,它对编译器来说是不明确的,但是不同的返回类型如何帮助决定调用哪个方法呢 public static void main(String args[]) throws Exception { PracticeGenerics p = new PracticeGenerics();

下面是示例代码,这让我对泛型中java方法重载的工作原理感到困惑

问题是:如果我用泛型参数重载方法,为什么需要有不同的返回类型

我知道erasure remove
,我所拥有的只是列表,它对编译器来说是不明确的,但是不同的返回类型如何帮助决定调用哪个方法呢

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;
    }
publicstaticvoidmain(字符串args[])引发异常{
PracticeGenerics p=新PracticeGenerics();
p、 test();
}
private void test()引发异常{
//print(null);//print(List)方法对于类型practice泛型不明确
打印(新的LinkedList());
打印(新的LinkedList());
}
公共字符串打印(列表){
System.out.println(“打印字符串”);
返回null;
}
公共对象打印(列表){
System.out.println(“打印整数”);
返回null;
}
我的计算机上的Java版本:

java版本“1.6.0_31”

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


Java HotSpot(TM)64位服务器虚拟机(构建20.6-b01,混合模式)

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

方法的签名由方法名称和参数组成。重载方法时,名称显然是相同的,这意味着重载方法的不同之处在于它们所具有的参数列表


返回类型与方法重载无关

为什么不将方法重命名为
printIntegerList
printStringList
,这样就不会对调用的方法产生歧义?可能重复的不确定我是否理解您的问题。拥有不同的返回类型不足以让代码编译。另外,您的代码示例包含一个注释掉的关于传递空值的部分-这与您的问题有关吗?@Mohit您正在使用哪个编译器?我尝试了Eclipse和Java 8的
javac
,但它拒绝编译您的代码。我认为问题在于Eclipse。当涉及泛型时,IDE似乎会在检查擦除时测试返回类型,但基本Java编译器只会检查名称和参数。这可能是一个错误报告的呼吁,我也有同样的理解,但现在我已经碰上了这个问题。。。我希望有人能确认这是一个错误,或者让我们等待任何人与一些额外的信息。