带有可选参数的重载方法?

时间:2014-08-20 15:51:55

标签: java overloading

如果我重载一个方法并决定给一个可选参数:

public static void method(int a, double b, String... c){
    //method
}


public static void method(int a, double b, string c, string d){
    //method
}

public static void main(String[] args){
method.(int, double, string, string);
}

省略号表示第一个方法的零个或多个字符串,第二个方法需要两个字符串。如果我调用方法并输入两个字符串,调用哪个方法?

编辑:我一直在测试这个,但是我一直在编译错误,在参数之前但在点之后搜索标识符。是(非常)新的Java,什么是标识符,它如何应用于这些方法?

2 个答案:

答案 0 :(得分:1)

如果没有其他选择,Java将仅使用varargs参数调用方法。因此,当您传递2 String时,将调用没有varargs参数的方法。

答案 1 :(得分:1)

更多插图:

另一个答案是好的,但我认为需要更多地说明here

JAVA 通过扩展/装箱/ varargs 序列搜索以下列方式决定从几个重载方法调用哪个方法:

  • 加宽节拍拳击
  • 拓宽节拍Varargs
  • 拳击击败Varargs

那是:

拓宽>拳击>变量args

所以带有变量args的方法被称为最后一个选项。

一些解释:

拳击是将原始类型转换为相应的引用类型,即:

int -> Integer
byte -> Byte 

拓宽将变量转换为更宽泛的类型,即:

String -> Object
int -> long

所以 JAVA 使用它来通过重载方法扩大匹配过程的范围。