为什么在区分方法时不考虑返回类型?

时间:2010-06-16 17:50:25

标签: java overloading

  

可能重复:
  Java - why no return type based method overloading?

  

编译器不考虑返回   在区分方法时输入,所以   你不能用两种方法声明   即使他们有一个相同的签名   不同的回报类型。
  Java Tutorial

为什么会这样?

5 个答案:

答案 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支持纯粹基于返回类型的重载。然而谷歌对其运作方式的最佳解释是堆栈溢出帖子:

Function overloading by return type?