2012年10月14日日曜日

Groovy!! (MOP: Meta Object Protocolの巻)

Groovyのすべてのクラスは暗黙的にgroovy.lang.GroovyObjectインタフェースを実装していて、GroovyObjectインタフェースにはMOP用のメソッドが定義されている。

こんな感じ。シンプル。
invokeMothod
set/getProperty
set/getMetaClass
→groovy.lang.MetaClass imprements MetaObject

コード例
package com.e2info.groovy
// groovy.lang.GroovyObject#getMetaClass
String.metaClass.define {
hello { return "hello " + delegate }
bye { return "bye " + delegate }
}
println "world".hello()
println "world".bye()
String.metaClass.and = {return delegate + it}
println "xxx".and("yyy")
/*
hello world
bye world
xxxyyy
*/
// groovy.lang.GroovyObject#invokeMethod
class InvokeMethodSample{
def invokeMethod(String method, Object params) {
println method
if(params != null){
params.each{ println it }
}
}
def getProperty(String property){
println property
}
}
def im1 = new InvokeMethodSample();
im1.aiueo("a", "b");
/*
aiueo
a
b
*/
// groovy.lang.GroovyObject#getProperty
def im2 = new InvokeMethodSample();
im2.name
/*
name
*/
view raw mop.groovy hosted with ❤ by GitHub


まとめ
grooby++

かねこ\(^o^)/