Java中参数类型旁边的3个点是什么意思?

新手上路,请多包涵

以下方法中 String 后面的3个点是什么意思?

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

原文由 Vikram 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 781
2 个回答

这意味着零个或多个 String 对象(或它们的单个数组)可以作为该方法的参数传递。

请参阅此处的“任意数量的参数”部分:http: //java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

在您的示例中,您可以将其称为以下任何一种:

 myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});

重要提示: 以这种方式传递的参数始终是一个数组——即使只有一个。确保在方法体中以这种方式对待它。

重要说明 2: 获得 ... 的参数必须是方法签名中的最后一个。所以, myMethod(int i, String... strings) 可以,但是 myMethod(String... strings, int i) 不行。

感谢 Vash 在评论中的澄清。

原文由 kiswa 发布,翻译遵循 CC BY-SA 4.0 许可协议

该功能称为 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 作为数组:

 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 的评论。

原文由 Cristian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题