在方法定义期间用作参数的一部分时,三个点 (...) 表示啥? [复制]

Posted

技术标签:

【中文标题】在方法定义期间用作参数的一部分时,三个点 (...) 表示啥? [复制]【英文标题】:What do three dots (...) indicate when used as a part of parameters during method definition? [duplicate]在方法定义期间用作参数的一部分时,三个点 (...) 表示什么? [复制] 【发布时间】:2012-07-26 07:34:45 【问题描述】:

三个点(...)在方法定义过程中用作参数的一部分时表示什么?

另外,这三个点的符号是否有任何编程术语?

我在一个代码示例中注意到:

public void method1 (Animal... animal) 
// Code

这个方法是从两个地方调用的。但是在两种情况下调用时传递的参数是不同的:

    对象数组作为参数传递给 method1(Animal...)

    Animal 类的对象作为参数传递给 method1(Animal...)

那么,如果您不确定是否将数组的单个元素或整个数组作为参数传递给方法,您是否可以在方法定义中使用 3 个点作为参数的一部分?

另外,如果这三个点的符号有任何编程术语,请告诉我。

【问题讨论】:

【参考方案1】:

它被称为可变参数。

这意味着您可以传递任意数量的该类型。

它实际上将其转换为method1(Animal[] a),并且您将它们引用为a[1],就像您对任何其他数组一样。

如果我有以下情况

Cat whiskers = new Cat();
Dog rufus = new Dog();
Dolphin flipper = new Dolphin();

method1(whiskers, rufus, flipper); // okay!
method1(rufus); // okay!
method1(); // okay!
method1(flipper,new Parakeet()); // okay!

【讨论】:

【参考方案2】:

这意味着该方法接受该类型对象的数组但是,当您传递多个以逗号分隔的该类型的对象时,该数组会自动创建。

请记住,方法签名中只能有一个给定类型的 vararg 参数,并且在 vararg 之后的签名中不能有另一个相同类型的参数(显然,没有办法区分两者)。

【讨论】:

【参考方案3】:

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

也许:

x("foo", "bar");
x("foo", "bar", "baz");

【讨论】:

以上是关于在方法定义期间用作参数的一部分时,三个点 (...) 表示啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

7 java 笔记

概括`...`(三个点)参数调度:参数集的S4方法,包括`...`

当尝试在启动配置中将其用作字符串参数的一部分时,Eclipse 中的路径变量会丢失反斜杠

如何将方法的返回值用作另一个方法的参数?

当宏用作变量名时,有啥方法可以跳过宏替换(在预处理期间)?

重新定义内置的方案,但仅在用作特定过程的参数时?