java - 可变参数函数参数和非可变参数函数具有相同的签名,哪个将运行?

标签 java compilation

我刚刚测试了以下场景,两个函数:

// method A
private void make(Object ...objects ){
    System.out.println("varargs make");
}

// method B
private void make(){
    System.out.println("non varargs make");
}

通过调用make()

如果代码中只存在这两种方法之一,那么它就是被调用的方法。 但是,当两种方法都存在时,则仅调用方法 B。

我还有两个理论问题和一个实践问题..

1) 是什么让编译器“偏爱” B 而不是 A ?

2)这是有意的(标准)还是编译器执行的结果?

3)有没有办法“强制”编译器调用方法A?

最佳答案

1) What makes the compiler "favor" B to A ?

JLS 规范。它倾向于最具体的匹配(并且有关于其含义的规则)

2) Is this intentional (standard) or a result of the implementation of the compiler ?

按设计。

3) Is there a way to "force" the compiler to call method A ?

给出一个对象数组,可以是空数组,也可以是其他数组。

make(new Object[0]);

关于java - 可变参数函数参数和非可变参数函数具有相同的签名,哪个将运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259942/

相关文章:

c++ - "All memory allocated on the stack is known at compile time"是什么意思?

c - 代码是如何执行的和gcc

java - 我丢失了我的 R 文件。?我不知道发生了什么事。?

java - 尝试连接到 Web 服务时如何修复此错误 500?

java - Eclipse编译问题

Scala 宏和单独的编译单元

css - 编译 CSS Assets Heroku SASS 时出错

java - 关于 Hudson 中 Java 编译的问题

java - HIVE:NoSuchMethodError:org.fusesource.jansi.internal.Kernel32.GetConsoleOutputCP()I

java - Android HTTP 获取旧库