使用varargs进行自动装箱

时间:2018-02-02 04:22:19

标签: java

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)会抛出错误。

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)不一致。