6

スクリプトでは、メソッドは File 型のパラメーターを受け取り、それを File のコンストラクターに送信します。File には、別のファイルをパラメーターとして受け取るコンストラクターがないため、これは失敗します。

この呼び出しをインターセプトして、パラメーターを に変更するにはどうすればよいparameter.absolutePathですか?

例えば ​​:


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(File other) {
  this(other.absolutePath)
}
4

1 に答える 1

7

ここで答えを見つけることができました。上記で書いたものを機能させるコードは次のとおりです。


File.metaClass.constructor << { File arg ->
  new File(arg.absolutePath)
}
于 2009-08-10T13:18:39.217 に答える