代码之家  ›  专栏  ›  技术社区  ›  Jim

参数列表中的“…”是什么意思?doInBackground(字符串…参数)

  •  18
  • Jim  · 技术社区  · 15 年前

    我不懂那个语法。在谷歌上搜索不同的单词加上“…”是没用的。

    8 回复  |  直到 15 年前
        1
  •  12
  •   ewein    14 年前

    这叫做 Variadic function

    在计算机程序设计中,变量 函数是不确定的函数 arity,即接受 因为变量函数差别很大 在编程语言中。有 许多数学和逻辑 作为变量函数。例如, 数的总和或 串接或其他 序列是可以 逻辑上应用于 操作数。另一个有 作为变量实现 输出多种语言的函数 常用的Lisp函数格式是 两个这样的例子。两个都拿一个 指定格式的参数 提供值的参数 格式化。可变函数可以 语言。例如,C的printf, 如果不小心使用,会引起 一类安全漏洞称为 可能是因为语言支持 类型安全;它允许函数 试图从 比放在那里的还多-- 损坏堆栈并导致 意外的行为。可变 可以考虑功能性 作为应用功能的补充, 它有一个函数和一个 然后调用函数一次,用 参数是 列表。

    五月之一 个人最爱 中未使用的功能 爪哇 . 它基本上是一个由元素构建的引用数组。使用它的最佳方法之一是在类构造函数或方法上,在类构造函数或方法中,您需要不断地找到一个值,比如最大值为2、3、4、5个输入元素。

    binary tree node ,对于编码任务,我在构造函数中使用了这个。这使我能够简单地向树中添加元素并分发它们。

    "Red" 和2个分支 "Blue" 和 "Green" .

    new MBTN<String>("Red", "Blue", "Green").
    

    你能想象一下替代方案是什么吗:D你甚至不能简单地创建元素的泛型数组,所以这会像地狱一样延伸。这绝对不是没用的。

        2
  •  14
  •   BalusC    15 年前

    它叫 varargs . 这个事实应该会让步 better Google results

        3
  •  11
  •   Edwin Buck    12 年前

    它们是“变量参数”或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);
      }
    }
    ...
    

        4
  •  3
  •   Mike Deck    15 年前

    正如@BalusC提到的,它是一个varags参数。这意味着您可以将可变数目的参数传递给该方法。

    所以对于定义为

    public void foo(String...strings) {  }
    

    以下调用是合法的:

    foo();
    foo("one param");
    foo("one", "two", "three");
    
        5
  •  1
  •   Andy    15 年前

    它们是可变长度参数。

    这里有一个链接 example.

        6
  •  1
  •   Buhake Sindi Tesnep    15 年前

    //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;
    

    内部varargs“本质上”是其声明类型的引用数组。

        7
  •  0
  •   Manuel Selva    15 年前

    这是一个java方法,它接受任意数量的参数

        8
  •  0
  •   Mads Lee Jensen    15 年前

    它意味着“任意数量的参数”意味着您可以将未知数量的参数传递给方法。。

    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
    }