如下方法中的三个点是什么意思? html
public void myMethod(String... strings){ // method body }
能够说,这是语法糖的一个例子,由于不管如何它都是做为数组实现的(这并不意味着它没有用)-我更喜欢传递数组以使其清晰,并声明具备给定类型数组的方法。 不过,与其说是答案,不如说是一种意见。 java
若是您来自该背景,只需将其视为C#中的关键字params
:) 数组
该功能称为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用做数组: less
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] } }
这个答案很大程度上取材于kiswa和Lorenzo的观点...以及Graphain的评论。 函数
这意味着能够将零个或多个String对象(或它们的数组)做为该方法的参数传递。 ui
请参见此处的“任意数量的参数”部分: http : //java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs this
在您的示例中,您能够将其称为如下任意一种: spa
myMethod(); // Likely useless, but possible myMethod("one", "two", "three"); myMethod("solo"); myMethod(new String[]{"a", "b", "c"});
重要说明:以这种方式传递的参数始终是一个数组-即便只有一个。 确保在方法主体中以这种方式对待它。 code
重要说明2:获取...
的参数必须是方法签名中的最后一个。 所以, myMethod(int i, String... strings)
能够,可是myMethod(String... strings, int i)
则能够。
感谢Vash在他的评论中的澄清。
这是Java传递varargs (可变数字参数)的方法。
若是您熟悉C,则相似于printf
函数使用的...
语法:
int printf(const char * format, ...);
可是以一种类型安全的方式:每一个参数都必须符合指定的类型(在您的示例中,它们都应为String
)。
这是有关如何使用varargs的简单示例:
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[]
做为参数。