我刚刚测试了以下场景,两个函数:
// method A
private void make(Object ...objects ){
System.out.println("varargs make");
}
// method B
private void make(){
System.out.println("non varargs make");
}
Run Code Online (Sandbox Code Playgroud)
跟电话make()
.
如果代码中只存在两种方法中的一种,那么它就是被调用的方法.但是,当两种方法都存在时,只调用方法B.
我还有两个理论问题和一个实际问题.
1)是什么让编译器"偏爱"B到A?
2)这是故意(标准)还是编译器实现的结果?
3)有没有办法"强制"编译器调用方法A?
1)是什么让编译器"偏爱"B到A?
JLS规范.它有利于最具体的匹配(并且具有关于这意味着什么的规则)
2)这是故意(标准)还是编译器实现的结果?
按设计.
3)有没有办法"强制"编译器调用方法A?
给出一个对象数组,空或其他方面.
make(new Object[0]);
Run Code Online (Sandbox Code Playgroud)