【发布时间】:2015-06-10 04:51:17
【问题描述】:
我知道要重载 Java 中的方法,我们需要更改参数中的某些内容,无论是参数的数量还是其中至少一个参数的类型。这种方式在编译时编译器能够静态绑定将被调用的方法,但我只是想知道为什么改变方法的返回类型还不够,第一个响应是因为歧义,但在我的如果我们有意见:
public class Test {
public Integer method1(Integer a, Integer b) {
return a + b;
}
public String method1(Integer a, Integer b) {
return "test";
}
public static void main(String[] args) {
String result = method1(2, 4);
}
}
我知道这段代码无法编译,但我的问题是:编译器是否有可能检查我们期望的返回类型并基于此将调用绑定到正确的方法?
编辑:我想在我的问题中非常清楚我知道只有参数是方法签名的一部分,我知道我们可以让方法不返回任何内容,所以我们有一个歧义,所以编译应该提出错误,但是我们完全没有歧义的情况呢?就像我提出的例子......这可行吗?有人知道不这样做的特殊原因吗?
【问题讨论】:
-
如何编译
Object o = method1(2, 4);。或者干脆method1(2, 4);? -
如果我想在不存储返回值的情况下调用
method1(1, 2);之类的方法怎么办? JVM 应该调用什么? -
@Tom 总是可以发明规则,例如,可能缺少返回目标会导致歧义错误。这就是为什么像这样的问答完全是推测性的。
-
@Radiodef 如果您需要将返回值存储在临时变量中,以避免编译器错误,这样的规则可能真的很烦人。但无论如何我都会考虑这种重载代码的味道,所以我不会接触这个规则:D。
-
对此有很多答案。只需搜索“方法重载 java 返回类型”。
标签: java