2016-12-24 4 views
1

groovyのメソッドにインタフェースをvarargsパラメータとして渡す方法はありますか?ここでインタフェースをGroovyのメソッドにvarargsパラメータとして渡すにはどうすればよいですか?

は私がやろうとしているものです:私は、次のコードを実行すると

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: [[email protected], [email protected]]

は私が変更すること何が必要ですか?

答えて

5

Javaスタイルの... -varargsは、JVMに対してちょうどHandler[]です。それは、よりエレガントに見えたので

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

Handler[]にリストキャストとして渡す)

+0

ニース!アップアップされました! :) – Opal

+0

@Opalが渡されたハンドラは1つだけです。あなたのソリューションは短くなりますので、返されます;) – cfrick

+0

@cfrickこれは十分にエレガントです。ありがとうございました! – kshep92

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) 

あなたはキャストを行う必要があります。

+1

は前の回答を受理されましたが、あなたのソリューションは、私は 'それを支援するコーディングできます:だから仕事を作るための最短の方法ですIntelliJでは、upv​​oteを持っています。 – kshep92

関連する問題