Java - 为什么没有基于返回类型的方法重载?

我知道这是不可能的,但任何人都可以提供一个理论来解释为什么Java选择不支持这一点?我之所以问这个问题,是因为我刚刚遇到了一种情况,我认为这样做会很好。


答案 1

因为您不需要在Java中捕获方法的返回值,在这种情况下,编译器无法决定使用哪个重载。例如:

boolean doSomething() { ... }

int doSomething() { ... }

doSomething(); // which one to call???

答案 2

关于这个问题的一个有趣的方面是,Java语言禁止仅通过返回类型重载方法。但不是JVM:

请注意,一个类中可能有多个匹配的方法,因为虽然 Java 语言禁止一个类声明具有相同签名但返回类型的多个方法,但 Java 虚拟机则不然。虚拟机中这种增加的灵活性可用于实现各种语言功能。例如,协变返回可以使用桥接方法实现;桥接方法和被覆盖的方法将具有相同的签名,但返回类型不同。

From: Class.getMethod(String, Class...)