Java,参数中有3个点

如下方法中的三个点是什么意思? html

public void myMethod(String... strings){
    // method body
}

#1楼

能够说,这是语法糖的一个例子,由于不管如何它都是做为数组实现的(这并不意味着它没有用)-我更喜欢传递数组以使其清晰,并声明具备给定类型数组的方法。 不过,与其说是答案,不如说是一种意见。 java


#2楼

若是您来自该背景,只需将其视为C#中的关键字params :) 数组


#3楼

该功能称为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的评论。 函数


#4楼

这意味着能够将零个或多个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在他的评论中的澄清。


#5楼

这是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[]做为参数。

相关文章
相关标签/搜索