Japanese Groovy way to implement interfaces Add comment to Wiki View in Wiki Edit Wiki page Printable Version



Groovyはいくつかの非常に便利なインタフェースの実装方法を提供しています。

クロージャでインタフェースを実装する



メソッドを一つだけ持つインタフェースはクロージャを使用して次のように実装することができます。



一つ以上のメソッドを持つインタフェースもクロージャを使って実装することができます。クロージャはインタフェース上のそれぞれのメソッドから起動されます。なのですべてのメソッドにマッチするようなパラメータリストを持つクロージャが必要ですので、通常は唯一のパラメータとして配列を使用したいと思うでしょう。これはどんなGroovyのクロージャとしても使えるし、全ての引数は配列として集めらます。

マップでインタフェースを実装する



より一般的な複数のメソッドを持つインタフェースは次のようにマップを使用して実装されるでしょう。



これはむしろ不自然な例だということに注意して下さい。でも、概念を示しています。



あなたは実際に呼ばれるメソッドだけ実装すればいいのです、しかしもし呼ばれたメソッドがマップに存在していなかった場合は以下例のように NullPointerException が投げられます。



間違って { } でマップを定義しないように注意して下さい。次のコードで何が起こるか推測できますか?



ここで定義したものはラベル付きのクロージャとブロックです。これは全てのメソッドが呼び出す一つのクロージャを定義しただけです。いくつかの言語ではマップを定義するのに { } を使いますので、Groovyではマップを定義するのに [:] を使うということに慣れるまでは間違いやすい部分です。



上記のようにas演算子を使用する場合は、マップを使って実装するインタフェースへの静的参照を知っている必要があります。もし実装したいインタフェースを表す java.lang.Class オブジェクトを参照として持っている(すなわち、スクリプトを書いている時にはまだ型が分からなかったり、直書きできないような)場合は、次のようにasTypeメソッドを使用することができます。



以下も参照してください:

 

Search

Results of your search request can come from various sources: the Groovy website itself, the JIRA issues, the API documentation, as well as a few other interesting Groovy-related blogs.

  By  -  pages  -  views  - last modified