java - Varargs 方法中的重载

标签 java overloading variadic-functions

public class OverloadingVarargsMethodWithNormalMethod {

     static void a(int... c){
         System.out.println(c.length);
         for(int array:c){
            System.out.println(array);
         }
     }  

    static void a(int d,int e,int f){  
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
    }

    public static void main(String[] args) {
         a(1,2,3);
    }
}

我预计会出现不明确的错误。但是,代码运行了第二个“a ”方法。为什么?有两种方法适合 a(1,2,3) 吗?

最佳答案

将调用最具体的函数定义。 int a, int b, int cint... c 更具体。

出于同样的原因,以下内容是有效的

static void foo(String a) {

}
static void foo(Object a) {

}

第一个将被调用 foo("bar");

进一步阅读:https://blogs.oracle.com/mcimadamore/entry/testing_overload_resolution

关于java - Varargs 方法中的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27697171/

相关文章:

C++:从派生实例调用基类中的纯虚方法重载

c++ - 用于将 unique_ptr 的 vector 初始化为基类型的可变参数构造函数

Scala - 可以取消申请返回可变参数吗?

java - 在java中获取用户的SpooleFileList以及我们在as400中可以执行的所有操作(如查看、更改等)

java - Apache 希罗 : not able to access secured URL although logged in successfully

java - Jackson - 自定义 TypeId 解析器

java - 子类问题(JAVA)

C++ va_list 函数重载

Python-使用不同的参数重载相同的函数

rust - 如何使用从 rust Vec 中提取的参数列表调用可变参数 C 函数?