方法调用顺序

时间:2013-04-30 05:31:54

标签: java language-design variadic-functions

以下代码在Java中编译良好:

public static void main(String[] args) {
    int i =5;
    call(i);
}


static void call(int i){
    System.out.println("int");
}

static void call(long i){
    System.out.println("long");
}

static void call(Integer i){
    System.out.println("Integer");
}


static void call(Object i){
    System.out.println("Object");
}

但是下面的代码给出了编译时错误:

public static void main(String[] args) {
    int i =5;
    call(i);
 }


static void call(int... i){
    System.out.println("int...");
}

static void call(long... i){
    System.out.println("long...");
}

static void call(Integer... i){
    System.out.println("Integer...");
}


static void call(Object... i){
    System.out.println("Object...");
}

为什么使用var-args时Java不会维护类似的调用机制?在第二个示例中,调用应该转到方法static void call(int... i)

4 个答案:

答案 0 :(得分:1)

这是answer

Java不能很好地重载varargs方法。

以下是规格提供的内容:

那么什么时候应该使用varargs?作为客户,只要API提供它们,您就应该利用它们。核心API中的重要用途包括反射,消息格式化和新的printf工具。作为一名API设计师,只有在收益真正引人注目的情况下,才应谨慎使用它们。 一般来说,你不应该重载varargs方法,否则程序员很难弄清楚调用哪些重载。

答案 1 :(得分:0)

当您将该方法声明为Static void call(int ... i)并且该方法需要int数组时,但在调用此方法时,您只发送一个整数值。

Static void call(int... i) is Same as Static void call(int[] i)

答案 2 :(得分:-1)

变量参数在java中被视为数组。因此,不是传递int值,而是像数组一样传递它。例如。

int[] i ={5};
call(i);

答案 3 :(得分:-1)