“…”在参数列表中的含义是什么? doInBackground(String … params)
我不懂语法。 试图谷歌各种单词加“……”是没用的。
这称为Variadic函数 (wiki页面包含许多语言中的示例)。
在计算机编程中,可变函数是不定的arity的函数,即接受可变数量的参数的函数。 对可变参数函数的支持在编程语言中有很大差异。 有许多数学和逻辑运算自然地作为可变函数出现。 例如,数字的求和或字符串或其他序列的串联是可逻辑地应用于任何数量的操作数的操作。 在许多语言中作为可变参数函数实现的另一个操作是输出格式。 C函数printf和Common Lisp函数格式是两个这样的例子。 两者都采用一个指定输出格式的参数,以及提供要格式化的值的任意数量的参数。 变量函数可能会暴露某些语言中的类型安全问题。 例如,C的printf,如果不谨慎使用,可能会产生一类称为格式字符串攻击的安全漏洞。 攻击是可能的,因为对可变函数的语言支持不是类型安全的; 它允许函数尝试从堆栈中弹出更多的参数而不是放在那里 – 破坏堆栈并导致意外行为。 变量函数可以被认为是apply函数的补充,它将函数和列表/序列/数组作为参数,然后调用函数一次,参数是列表的元素。
可能是Java中 个人最喜欢的未使用的function之一。 它基本上是一个由元素构建的引用数组。 使用它的最好方法之一是在类构造函数或方法中,您需要不断地找到最多2,3,4,5个输入元素的值。
一个例子是,当我构建一个通用binary tree node
,为了编码任务,我在构造函数中使用了它。 这使我能够简单地向树中添加元素并分发它们。
以下创建String类型二叉树,根"Red"
和2个分支"Blue"
和"Green"
。
new MBTN("Red", "Blue", "Green").
你能想到替代方案会是什么:D你甚至不能简单地制作通用的元素数组,所以这会像地狱一样延伸。 绝对没有用。
它被称为varargs 。 这一事实应该会产生更好的Google结果 。
它们是“可变参数”或varargs(简称)。
基本上它允许传递一个未指定数量的字符串,所以方法签名
public void printStuff(String...messages)
有效地可以处理以下呼叫
printStuff("hi"); printStuff("hi", "bye"); printStuff("Hello", "How are you?", "I'm doing fine.", "See you later");
您可以有效地将此视为一种自动装箱。 printStuff
参数可以看作是一个数组,因此printStuff(String...messages)
在概念上像printStuff(String[] messages)
一样处理。 上面的呼叫有效地表现得像
printStuff(new String[] {"hi"}); printStuff(new String[] {"hi", "bye"}); printStuff(new String[] {"Hello", "How are you?", "I'm doing fine.", "See you later"});
要在内部访问消息,请使用典型的List
处理原语。 就像是
... if (messages != null) { for (String message : messages) { System.out.println(message); } } ...
随着自动装箱的出现,没有必要真正创建数组是Java添加了一些语法糖。
正如@BalusC所提到的,它是一个varags参数。 这意味着您可以将可变数量的参数传递给该方法。
所以对于定义为的方法
public void foo(String...strings) { }
以下调用是合法的:
foo(); foo("one param"); foo("one", "two", "three");
它们是可变长度参数。
这是一个带有示例的链接。
正如大家所提到的……可变参数(或varargs)允许你这样做….
//Method we're using for varargs public void doSomething(String... datas) { if (datas == null || datas.length == 0) { System.out.println("We got nothing"); } else { for (String data: datas) { System.out.println(data); } } }
因此,下面提到的所有这些电话都是有效的….
String d[] = {"1", "2", "3"}; doSomething(d); //An array of String, as long as the type is exactly as the varargs type. //OR doSomething("1", "2", "3", "4"); //I can add "infinitely" many arguments as the JVM can allocate me.... //OR doSomething("1"); //Exactly 1;
内部变量“基本上”是它声明类型的引用数组。
这是一个采用任意可变数量参数的java方法
它意味着“任意数量的参数”意味着您可以将未知数量的参数传递给方法。
看到
http://download.oracle.com/javase/tutorial/java/javaOO/arguments.html查找“任意数量的参数”部分
public Polygon polygonFrom(Point... corners) { int numberOfSides = corners.length; double squareOfSide1, lengthOfSide1; squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x) + (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ; lengthOfSide1 = Math.sqrt(squareOfSide1); // more method body code follows that creates // and returns a polygon connecting the Points }