2009-08-10 11 views
6

スクリプトでは、メソッドはFile型のパラメータを受け取り、それをFileのコンストラクタに送信します。 Fileには、別のファイルをパラメータとして受け取るコンストラクタがないため、これは爆発します。Groovyでこのコンストラクタ呼び出しを傍受するにはどうすればよいですか?

この呼び出しを代行受信し、パラメータをparameter.absolutePathに変更するにはどうすればよいですか?例えば


File(File other) { 
    this(other.absolutePath) 
} 

答えて

6

私は答えhereを見つけることができた:


def x = new File("some_file") 
... 
def meth(def param) { 
    def y = new File(param) // if param is of type File, this blows up 
    // and I'd like groovy's intercepting capabilities to invoke this instead 
    // def y = new File(param.absolutePath) 
} 

それは私がこのコンストラクタを追加することができますどのように、行うことができない場合。上に書いたことを仕事にするコードは次のとおりです。


File.metaClass.constructor << { File arg -> 
    new File(arg.absolutePath) 
} 
関連する問題