下面方法中字符串后面的3个点是什么意思?
public void myMethod(String... strings) {
// method body
}
下面方法中字符串后面的3个点是什么意思?
public void myMethod(String... strings) {
// method body
}
当前回答
这是Java传递变量(可变数量参数)的方法。
如果你熟悉C语言,这类似于…语法使用它的printf函数:
int printf(const char * format, ...);
但是以一种类型安全的方式:每个参数都必须符合指定的类型(在您的示例中,它们都应该是String)。
这是一个如何使用可变参数的简单示例:
class VarargSample {
public static void PrintMultipleStrings(String... strings) {
for( String s : strings ) {
System.out.println(s);
}
}
public static void main(String[] args) {
PrintMultipleStrings("Hello", "world");
}
}
…参数实际上是一个数组,所以你可以传递一个String[]作为参数。
其他回答
这是Java传递变量(可变数量参数)的方法。
如果你熟悉C语言,这类似于…语法使用它的printf函数:
int printf(const char * format, ...);
但是以一种类型安全的方式:每个参数都必须符合指定的类型(在您的示例中,它们都应该是String)。
这是一个如何使用可变参数的简单示例:
class VarargSample {
public static void PrintMultipleStrings(String... strings) {
for( String s : strings ) {
System.out.println(s);
}
}
public static void main(String[] args) {
PrintMultipleStrings("Hello", "world");
}
}
…参数实际上是一个数组,所以你可以传递一个String[]作为参数。
语法: (三点…)——>表示我们可以添加0个或多个对象,传递参数或传递object类型的数组。
public static void main(String[] args){}
public static void main(String... args){}
定义: 1)对象…参数只是一个对象数组的引用。
2) ('String[]'或String…)它可以处理任意数量的字符串对象。在内部,它使用引用类型object的数组。
i.e. Suppose we pass an Object array to the ... argument - will the resultant argument value be a two-dimensional array - because an Object[] is itself an Object:
3)如果你想用一个参数调用方法,而它恰好是一个数组,你必须显式地将它包装起来
another. method(new Object[]{array});
OR
method((Object)array), which will auto-wrap.
应用程序: 它主要用于参数数量是动态的(运行时知道的参数数量)和覆盖的情况。 一般规则-在方法中,我们可以传递任意类型和任意数量的参数。我们不能在任何特定参数之前添加object(…)参数。 即。
void m1(String ..., String s) this is a wrong approach give syntax error.
void m1(String s, String ...); This is a right approach. Must always give last order prefernces.
这意味着零个或多个String对象(或它们的单个数组)可以作为该方法的参数传递。
参见“任意数量的参数”部分:http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs
在你的例子中,你可以这样调用它:
myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});
重要提示:以这种方式传递的参数始终是一个数组——即使只有一个。确保在方法体中也这样对待它。
重要说明2:获取…必须是方法签名中的最后一个。myMethod(int i, String…字符串)是好的,但myMethod(字符串…字符串,int i)是不行的。
感谢Vash在评论中的澄清。
可以说,它是语法糖的一个例子,因为它无论如何都是作为一个数组实现的(这并不意味着它是无用的)——我更喜欢传递一个数组以保持它的清晰,并声明具有给定类型的数组的方法。不过,与其说是回答,不如说是意见。
这个特性叫做可变参数,是Java 5中引入的一个特性。这意味着函数可以接收多个String参数:
myMethod("foo", "bar");
myMethod("foo", "bar", "baz");
myMethod(new String[]{"foo", "var", "baz"}); // you can even pass an array
然后,你可以使用String变量作为数组:
public void myMethod(String... strings) {
for (String whatever : strings) {
// do what ever you want
}
// the code above is equivalent to
for (int i = 0; i < strings.length; i++) {
// classical for. In this case you use strings[i]
}
}
这个答案很大程度上借鉴了kiswa和Lorenzo的……也来自Graphain的评论。