No Programming, No Life

プログラミング関連の話題や雑記

Groovyでクラスの拡張

Groovyでクラスを拡張する際は、Expando MetaClassを利用するみたい。

ひとまず試しやすいStringと、何の脈絡もないけどMathクラスを拡張させてみた。

(動作確認 Groovy Version: 1.5.7 JVM: 1.6.0_10)

// Hello!の後にオリジナル文字列を出力
String.metaClass.sayHello = { "Hello! ${delegate}" }
// #toUpperCase()のショートカット
String.metaClass.up = { -> delegate.toUpperCase() }
// staticに追加。Hello!の後にmultiply倍したPI値を出力
Math.metaClass.'static'.sayHello = { multiply ->
  "Hello! ${multiply * delegate.PI}"
}

assert 'Hello! aa'               == 'aa'.sayHello() 
assert 'AA'                       == 'aa'.up()
assert 'Hello! 6.283185307179586' == Math.sayHello(2)

staticなメソッドを追加する際は「metaClass.'static'」となるようです。