问题
以下方法中的3个点是什么意思?
public void myMethod(String... strings){
// method body
}
#1 热门回答(802 赞)
这意味着可以传递零个或多个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 ... strings)
没关系,但是myMethod(String ... strings,int i)
不行。
感谢Vash在评论中的澄清。
#2 热门回答(99 赞)
该功能称为varargs,它是Java 5中引入的一个功能。它意味着该函数可以接收多个String
参数:
myMethod("foo", "bar");
myMethod("foo", "bar", "baz");
myMethod(new String[]{"foo", "var", "baz"}); // you can even pass an array
然后,你可以使用String
var作为数组:
public void myMethod(String... strings){
for(String whatever : strings){
// do what ever you want
}
// the code above is is equivalent to
for( int i = 0; i < strings.length; i++){
// classical for. In this case you use strings[i]
}
}
这个答案大量借鉴了基斯瓦和洛伦佐的......以及格拉芬的评论。
#3 热门回答(12 赞)
这是passvarargs(变量号参数)的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 []
作为参数。