变量函数参数和相同签名的非可变函数,将运行?

Ore*_*ren 0 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");
}
Run Code Online (Sandbox Code Playgroud)

跟电话make().

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

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

1)是什么让编译器"偏爱"B到A?

2)这是故意(标准)还是编译器实现的结果?

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

Pet*_*rey 6

1)是什么让编译器"偏爱"B到A?

JLS规范.它有利于最具体的匹配(并且具有关于这意味着什么的规则)

2)这是故意(标准)还是编译器实现的结果?

按设计.

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

给出一个对象数组,空或其他方面.

make(new Object[0]);
Run Code Online (Sandbox Code Playgroud)