0

我刚刚测试了以下场景,两个功能:

// 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 ?

4

1 回答 1

6

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

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

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

按设计。

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

给一个对象数组,空的或其他明智的。

make(new Object[0]);
于 2013-01-10T14:19:46.893 回答