为什么在方法重载中不考虑方法的返回类型?有人可以解释一下,编译器如何检查重载方法吗?
问问题
191 次
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 回答