可能这已经被多次询问了,但我仍然怀疑不清楚:
我有这样的方法:
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,我希望它可以工作。
我不明白为什么?
答案 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没有简单的方法可以在一个陈述中完成你想要做的事情。