我刚刚测试了以下场景,两个函数:
// 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/