如何将接口作为varargs参数传递给Groovy中的方法?

时间:2016-12-24 08:20:26

标签: groovy variadic-functions

有没有办法将接口作为varargs参数传递给groovy中的方法?

这是我正在尝试做的事情:

interface Handler {
    void handle(String)
}

def foo(Handler... handlers) {
    handlers.each { it.handle('Hello!') }
}

foo({ print(it) }, { print(it.toUpperCase()) })

当我运行以下代码时,我收到错误: No signature of method: ConsoleScript8.foo() is applicable for argument types: (ConsoleScript8$_run_closure1, ConsoleScript8$_run_closure2) values: [ConsoleScript8$_run_closure1@4359df7, ConsoleScript8$_run_closure2@4288c46b]

我需要改变什么?

2 个答案:

答案 0 :(得分:5)

Java风格的... - varargs只是JVM的Handler[]。因此,实现这项工作的最短途径是:

foo([{ print(it) }, { print(it.toUpperCase()) }] as Handler[])

(将它们作为列表转换为Handler[]

答案 1 :(得分:3)

这样:

interface Handler {
   void handle(String)
}

def foo(Handler... handlers) {
   handlers.each { it.handle('Hello!') }
}

foo({ print(it) } as Handler, { print(it.toUpperCase()) } as Handler)

你需要进行施法。