1

为什么在方法重载中不考虑方法的返回类型?有人可以解释一下,编译器如何检查重载方法吗?

4

2 回答 2

9

为什么在方法重载中不考虑方法的返回类型?

主要原因是,如果您确实考虑了这一点,那么如果返回值没有分配给某个东西,那么很多函数调用就会变得模棱两可。例如,这里调用了哪个函数调用?

public String x() { ... }
public int x() { ... }

// ...

x();  // <-- Which one did you mean? It's impossible to tell if you
      //     allow return types to be part of method overloads.

还有其他不想这样做的原因。也就是说,许多语言确实允许它们的签名仅在返回类型上有所不同。Haskell 和 Perl 就是两个例子。如果您的语言确实允许这样做,不难看出,您需要支持的只是方法解析过程中的另一个步骤:只需为编译器提供一种明显的方法来选择一种或另一种方法。在上面的示例中,也许我们会定义一个优先级(例如,可能定义的第一个方法是获胜的方法,因此我们的x()调用将调用String x())。

另一件需要注意的事情是,JVM确实允许存在两个签名仅在返回类型上不同的方法。(这就是 Scala 和其他支持此功能的 JVM 语言的方式。

于 2010-03-21T06:05:42.663 回答
2

有人可以解释一下,编译器如何检查重载方法吗?

Java 语言规范第 8.4.9 节将包含明确的(但非常技术性的)答案:http: //java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.9

于 2010-03-21T06:07:32.073 回答