如果我重载一个方法并决定给一个可选参数:
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,什么是标识符,它如何应用于这些方法?
答案 0 :(得分:1)
如果没有其他选择,Java将仅使用varargs参数调用方法。因此,当您传递2 String
时,将调用没有varargs参数的方法。
答案 1 :(得分:1)
另一个答案是好的,但我认为需要更多地说明here:
JAVA 通过扩展/装箱/ varargs 序列搜索以下列方式决定从几个重载方法调用哪个方法:
那是:
拓宽>拳击>变量args
所以带有变量args的方法被称为最后一个选项。
拳击是将原始类型转换为相应的引用类型,即:
int -> Integer
byte -> Byte
拓宽将变量转换为更宽泛的类型,即:
String -> Object
int -> long
所以 JAVA 使用它来通过重载方法扩大匹配过程的范围。