as(強制変換演算子)による無名クラスの代用
GroovyMagの今月号やSwingPadのソースみて勝手に驚いていたが,ウチ帰って「Grails徹底入門(asin:4798117366)」読み返してたら,ちゃんと書いてあった(p.72を参照)。
えー,何を驚いたかと言えば「クロージャやMapはas演算子を使う事でインターフェイスに変換できる」ということに驚いたのだよ。
つまり,(↓)こんなのとか,
def button = new JButton() button.addActionListener({ println "action!!" } as ActionListener)
(↓)こんなのはGroovy的にアリなんだそうな。
def panel = new JPanel() panel.addMouseListener([mouseClicked: { println "clicked" } mouseEntered: { println "entered" }, mouseExited: { println "exited" }, mouseReleased: { println "released" }] as MouseListener)
as演算子で指定する型は必ずしもインターフェイスである必要はないらしく,(↓)こんな風にアダプタを指定する事もできたよ。
def panel = new JPanel() panel.addMouseListener([mouseClicked: { println "clicked" } mouseReleased: { println "released" }] as MouseAdapter)続きを読む