読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

Groovyで動的メソッドの呼び出し方法

公式のドキュメントを見れば書いてたけど、結構そこに行き着くまで迷ったのでメモしておくよ。

class Hoge
{
    void piyo()
    {
        println "piyopiyo"
    }
}

というクラスがあったとする。

class Main
{
    static Main(args)
    {
        def a = new Hoge()
        
        args.each {opt-> //args つまり引数を順番に取り出してoptに入れる。
            a."$opt"() //動的に呼び出す
        }
    }
}

こうするとプログラム実行時に引数として渡した文字列をメソッド名としてHogeクラスから探して呼んでくれる。
ただし、存在しなかった場合はエラーになってしまう。

そこで...

class Hoge
{
    Object invokeMethod(String name,Object args)
    {
        println "E::" + name + " option is not found."
    }

    void piyo()
    {
        println "piyopiyo"
    }
}

という風に"invokeMethod"というメソッドを追加する。Rubyにも似たのがあるのだが、こいつは存在しないメソッドが呼ばれた時に自動で呼び出される。

このようにHogeを書き換えて同様に実行すると、存在しないメソッド名を指定した場合でも

$ java -jar sample.jar piyo hage
piyopiyo
E:: hage option is not found.

というように表示される。




Groovyのドキュメントのほうがシンプルでわかりやすいけどね
http://groovy.codehaus.org/Dynamic+Groovy

Firefox ブラウザ無料ダウンロード