【发布时间】:2015-03-08 14:09:06
【问题描述】:
这是一个无法编译的代码示例:
public class Test {
public static void main(String[] args) {
method(1);
}
public static void method(int... x) {
System.out.println("varargs");
}
public static void method(Integer... x) {
System.out.println("single");
}
}
有人能告诉我这些方法模棱两可的原因吗?提前谢谢你。
【问题讨论】:
-
如果我打电话给
method(1, 2),它应该打电话给哪个?如果是int方法,我怎么调用Integer方法? -
method(int) 和 method(Integer) 也可以这样说,但编译器可以选择更优选的方法,这就是我问这个问题的原因。
-
Np,它不能。因为 JLS 明确指出调用了 最具体的方法。所以在这种情况下
method(1)会调用int方法,method((Integer) 1)会调用Integer方法。关键是你有可变参数。 -
但我还是无法理解原因,因为我可以通过 method(1,2,3) 和 method(new Ineger(1), new Inetger(2), new Inetger(3)) 所以我可以调用这两种方法。但我不能....
-
为了更具体地回答,您需要将导致编译器错误的确切代码发布为 SSCCE 和完整的编译器错误。错误在于方法 invocation 而不是 declaration。
标签: java methods variadic-functions