LoginSignup
3
3

More than 5 years have passed since last update.

Groovyでメソッドを書き換えたりプロパティを追加する

Last updated at Posted at 2016-11-03

概要

groovyを使って
クラスやインスタンスのメソッドを書き換えたり
プロパティを追加するサンプルです

サンプル

class Target {
    String get() {
        "not overwritten"
    }
}

class DirectOverwrite {
    static void main(String[] args) {
        def target = new Target()
        def dontTouch = new Target()

        // まずは普通に"not overwritten"を出力
        println target.get()

        // インスタンスに対して処理を上書き
        target.metaClass.get = {
            "overwrote!"
        }

        // 上書き確認 出力が"overwrote!"に変わる
        println target.get()

        // 別のインスタンスは変わらない
        println dontTouch.get()

        // クラスに対して処理を上書き
        Target.metaClass.get = {
            "overwrote!"
        }

        // クラスを書き換えたあとにインスタンスを生成すると変わる
        dontTouch = new Target()
        println dontTouch.get()

        // プロパティも足せる
        Target.metaClass.message = "add property"
        Target.metaClass.get = {
            message
        }
        def addProperty = new Target()
        println addProperty.get()

        // あとで足したプロパティも書き換えられる
        Target.metaClass.set = { String s ->
            message = s
        }
        def setProperty = new Target()
        setProperty.set("set property!")
        println setProperty.get()
    }
}

結果

うまくいくとこんな出力になります

not overwritten
overwrote!
not overwritten
overwrote!
add property
set property!

今回作成したコード

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3