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'」となるようです。