2009-08-10 8 views
6

En un script, un método recibe un parámetro de tipo File y lo envía al constructor de File. Esto explota porque File no tiene un constructor que tome otro archivo como parámetro.¿Cómo puedo interceptar esta llamada de constructor en Groovy?

¿Cómo puedo interceptar esta llamada y modificar el parámetro a parameter.absolutePath?

Por ejemplo:


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) 
} 

Si eso no se puede hacer, cómo podría agregar este constructor:


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

Respuesta

6

he conseguido encontrar la respuesta here. Aquí está el código que hace que lo que escribí arriba funcione:


File.metaClass.constructor << { File arg -> 
    new File(arg.absolutePath) 
} 
Cuestiones relacionadas