答案 0 :(得分:13)
因为当您想要执行方法时,不需要分配结果。然后编译器如何知道您要调用哪些过载的?会有歧义。
答案 1 :(得分:2)
因为你无法从方法调用中分辨出返回类型应该是什么。编译器需要能够仅使用呼叫站点的信息来告知要调用的方法。返回值可能会被丢弃,因此您通常不会知道返回值及其类型。一旦你开始考虑类型coersions(short-> int)或强制转换,它就会变得更加混乱。
基本上,当编译器看到一个方法调用时,它知道所有的参数都需要存在才能成为一个有效的方法调用,所以它可以使用这些参数来找到正确的方法来调用。但是在调用时将不知道返回值,甚至返回值的类型也可能无法被发现。
答案 2 :(得分:0)
因为调用方法需要将返回类型传递给被调用的方法。
所以你有
Public Integer doStuff(String thing) { };
和
Public Double doStuff(String thing) { };
调用doStuff的类需要告诉类使用带有字符串的doStuff(已经执行),并返回Double(不执行)。
为什么java会这样做?为了帮助防止像我上面列出的可怕代码,我假设:)重载很容易搞砸,我不确定我看到上述情况的好处。
答案 3 :(得分:0)
任何给定的调用站点都可以成功使用多种不同的返回类型,至少由于多态性和自动(非)装箱,所以这需要处理模糊情况的规则,或者仅在简单情况下工作
答案 4 :(得分:0)
我只是想指出 - 尽管在Java中不可能 - 但Ada支持纯粹基于返回类型的重载。然而谷歌对其运作方式的最佳解释是堆栈溢出帖子: