下面方法中字符串后面的3个点是什么意思?
public void myMethod(String... strings) {
// method body
}
下面方法中字符串后面的3个点是什么意思?
public void myMethod(String... strings) {
// method body
}
当前回答
语法: (三点…)——>表示我们可以添加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.
其他回答
只要把它想象成c#中的关键字params,如果你来自那个背景的话:)
可以说,它是语法糖的一个例子,因为它无论如何都是作为一个数组实现的(这并不意味着它是无用的)——我更喜欢传递一个数组以保持它的清晰,并声明具有给定类型的数组的方法。不过,与其说是回答,不如说是意见。
这个特性叫做可变参数,是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的评论。
同样为了说明一些问题,重要的是要知道var-arg参数被限制为一个,你不能有多个var-art参数。例如,这是非法的:
public void myMethod(String... strings, int ... ints){
// method body
}
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)...