Las respuestas de this question about the Groovy way to dynamically invoke a static method era muy servicial pero estoy teniendo problemas con el siguiente caso:manera maravillosa para crear dinámicamente una instancia de una clase de cadena
que define una clase simple maravilloso:
class Item {
def id = 1
def data = [ "a", "b" ]
}
que entonces se define una clase sencilla utilidad que quiere cargar dinámicamente la clase de artículo:
class Util {
static def main(args) {
def cls = "Item" as Class
def instance = cls.newInstance()
println instance.toString()
}
}
Util.groovy está en la misma carpeta que Item.groovy
Cuando trato de ejecutar Util.groovy me sale el siguiente error:
Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'Item' with class 'java.lang.String'
to class 'java.lang.Class' due to:
java.lang.ClassNotFoundException: Item
at Util.main(Util.groovy:3)
La única manera que podía hacerlo era mediante el uso de trabajo groovyc precompilar Item.groovy, pero esto pasa por el punto de ser maravilloso :)
Probablemente debería cambiar 'this.class' a' this.getClass() '. En general, se recomienda utilizar el método completo para evitar [propiedades o correlaciones de mapas (o invalidaciones de invoqueMétodo)] (http://groovy.329449.n5.nabble.com/class-vs-getClass-td368617.html). – OverZealous
¿Por qué molestarse cuando sabemos que esto no es un mapa? ¡Abraza la dinámica! ;-) –
¡Funcionó! Gracias Tim! :) –