class MyClass{
static void aut(int i) {}
static void aut(Integer i) {}
static void vararg(int... ia) {}
static void vararg(Integer... ia) {}
public static void main(String args[]) {
aut(1); // compiles successfully
vararg(1); // The method vararg(int[]) is ambiguous for the type MyClass
}
}
我无法理解为什么vararg(1)
会抛出错误。
答案 0 :(得分:7)
应该选择最具体的方法,那个方法应该是单个int参数而不是varargs。
看起来Java的错误没有完全解决,尽管它们已将其标记为已解决。
JDK-6886431 : Handling of "most specific" varargs method inconsistent with JLS
问题描述:
当调用具有以下重载签名的方法时,我预计会出现歧义错误(假设参数与两者兼容):
int f(Object... args);
int f(int... args);
javac将第二个视为比第一个更具体。这种行为是明智的(我更喜欢),但与JLS(15.12.2)不一致。