下面方法中字符串后面的3个点是什么意思?
public void myMethod(String... strings) {
// method body
}
下面方法中字符串后面的3个点是什么意思?
public void myMethod(String... strings) {
// method body
}
当前回答
只要把它想象成c#中的关键字params,如果你来自那个背景的话:)
其他回答
可以说,它是语法糖的一个例子,因为它无论如何都是作为一个数组实现的(这并不意味着它是无用的)——我更喜欢传递一个数组以保持它的清晰,并声明具有给定类型的数组的方法。不过,与其说是回答,不如说是意见。
A really common way to see a clear example of the use of the three dots it is present in one of the most famous methods in android AsyncTask ( that today is not used too much because of RXJAVA, not to mention the Google Architecture components), you can find thousands of examples searching for this term, and the best way to understand and never forget anymore the meaning of the three dots is that they express a ...doubt... just like in the common language. Namely it is not clear the number of parameters that have to be passed, could be 0, could be 1 could be more( an array)...
这是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.
同样为了说明一些问题,重要的是要知道var-arg参数被限制为一个,你不能有多个var-art参数。例如,这是非法的:
public void myMethod(String... strings, int ... ints){
// method body
}