una sirve que programacion para manejo funciones extraer declarar caracteres cadenas cadena groovy

groovy - sirve - que es string en java



Forma maravillosa de crear instancias dinĂ¡micas de una clase de String (2)

Esto funciona, usando el GroovyClassLoader subyacente :

def instance = this.class.classLoader.loadClass( ''Item'', true, false )?.newInstance()

Las respuestas de esta pregunta sobre la forma Groovy de invocar dinámicamente un método estático fueron muy útiles, pero estoy teniendo problemas con el siguiente caso:

Definí una clase simple de Groovy:

class Item { def id = 1 def data = [ "a", "b" ] }

Luego definí una clase de utilidad simple que quiere cargar dinámicamente la clase Item:

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 intento ejecutar Util.groovy aparece 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 forma en que podía hacer que funcionara era usando Groovyc para precompilar Item.groovy, pero esto no tiene sentido ser Groovy :)


Simplemente tuve que hacer esto y encontré una manera interesante, así que pensé en volver y mencionarlo.

Tuve un problema con esto porque quería pasarle un valor a newInstance (usar un constructor no predeterminado) y todas las soluciones parecían tener un poco de trabajo (soy flojo, ¿de acuerdo?)

De todos modos, supongamos que quiere crear un nuevo Entero (5) ... intente esto:

c = "java.lang.Integer" p = "5" def result = Eval.me("return new ${c}(${p})") assert(result == 5)

Funcionó muy bien, aunque estoy seguro de que se trata de la solución más lenta posible. Tiene la ventaja de que el método es aplicable a muchas otras situaciones.