String vararg和String数组

时间:2016-12-01 13:02:50

标签: java string

可能这已经被多次询问了,但我仍然怀疑不清楚:

我有这样的方法:

public Object getConfig(String... names) {

当我把它称为:

案例1: configService.getConfig("str1", "str2", "str3"); // it works

案例2:

String[] names = {"str1","str2","str3"}; // it works
       configService.getConfig(names);

情形3: 但是当我尝试按照它不起作用时

String[] names = {"str1","str2","str3"};
configService.getConfig("randomString",names);

据我所知,我们正在传递getConfig(String,String []),这是String ... args,我希望它可以工作。

我不明白为什么?

3 个答案:

答案 0 :(得分:1)

您的方法需要一个数组作为参数或一系列字符串。你试图传递两个参数,一个字符串和一个数组。

请改为:

String[] names = {"str1","str2","str3"};
String[] namesX = new String[names.length+1];
for (int i = 0; i < names.length; i++) {
    namesX[i+1] = names[i];
}
namesX[0] = "randomString";
configService.getConfig(namesX);

答案 1 :(得分:1)

getConfig(String... names)方法签名等于getConfig(String[] names), 但不是getConfig(String name, String[] names)。就是这样。

您可以添加一个重载的getConfig(String name, String[] names),它会将所有参数收集到字符串数组中并调用原始的getConfig(String... names)后缀。

答案 2 :(得分:1)

Varargs是syntactic sugar,它编译了这种语法:

myMethod("foo", "bar", "baz");

void myMethod(String... args) {
    //
} 
好像是:

myMethod(new String[] {"foo", "bar", "baz"});

void myMethod(String[] args) {
    //
} 

由于方法的参数类型编译为myMethod(String[] args),因此您可以明确地将其传递给数组。

但是,在java中没有魔术和#34;连接&#34;元素和数组形成一个更大的数组,这是你尝试做的。

AFAIK没有简单的方法可以在一个陈述中完成你想要做的事情。