【问题标题】:Use of ellipsis(...) in Java? [duplicate]在Java中使用省略号(...)? [复制]
【发布时间】:2012-11-19 21:30:51
【问题描述】:

我正在查看一些代码并看到以下符号。我有点不确定这三个点是什么意思,你怎么称呼它们。

void doAction(Object...o);

谢谢。

【问题讨论】:

    标签: java oop object syntax


    【解决方案1】:

    表示这个方法可以接收多个Object作为参数。为了更好地理解,请查看here 中的以下示例:

    省略号 (...) 标识可变数量的参数,并且是 用下面的求和法证明。

    static int sum (int ... numbers)
    {
       int total = 0;
       for (int i = 0; i < numbers.length; i++)
            total += numbers [i];
       return total;
    }
    

    用逗号分隔的整数调用求和方法 随心所欲的争论——在 JVM 的限制之内。一些例子:总和 (10, 20) 和总和 (18, 20, 305, 4)。

    这非常有用,因为它允许您的方法变得更加抽象。还要检查来自 SO 的这个不错的example,用户是否利用 ... 符号来创建一种在 Java 中连接字符串数组的方法。

    来自Variable argument method in Java 5的另一个例子

    public static void test(int some, String... args) {
            System.out.print("\n" + some);
            for(String arg: args) {
                System.out.print(", " + arg);
            }
        }
    

    如评论部分所述:

    还要注意,如果函数传递的其他参数不同 类型比 varargs 参数,vararg 参数应该是最后一个 函数声明中的参数 public void test (Typev ... v , Type1 a, Type2 b)public void test(Type1 a, Typev ... v recipientJids, Type2 b) - 非法。仅 public void 测试(Type1 a, Type2 b, Typev ... v)

    【讨论】:

    • 您好梦之崩溃!我只是想将一个示例添加到您的帖子中会很酷,以及这适用于哪个 Java 版本。由于在 Google 的 App Engine 上,我被困在 Java 6 上,但我知道较新的 Java 版本有一些非常酷的新功能。希望这可以帮助! :)
    • 另外请注意,如果函数传递的参数类型不同于可变参数,可变参数应该是函数声明中的last参数。即public void test ( Typev ... v , Type1 a, Type2 b)public void test(Type1 a, Typev ... v recipientJids, Type2 b) - 非法仅限 public void test(Type1 a, Type2 b, Typev ... v) - 合法
    • 是的,你是对的,我会尽快将此信息添加到我的帖子中,谢谢。
    【解决方案2】:

    它被称为 VarArgs http://www.javadb.com/using-varargs-in-java。在这种情况下,这意味着您可以根据需要将多个 Object 实例作为 doAction() 的参数:

    doAction(new Object(), new Object(), new Object());
    

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2013-02-10
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多