Le risposte di this question about the Groovy way to dynamically invoke a static method sono stati molto utili, ma sto avendo problemi con il seguente caso:modo Groovy per istanziare dinamicamente una classe da String
ho definito una semplice classe Groovy:
class Item {
def id = 1
def data = [ "a", "b" ]
}
Ho poi definita una semplice classe di utilità che vuole caricare dinamicamente la classe dell'oggetto:
class Util {
static def main(args) {
def cls = "Item" as Class
def instance = cls.newInstance()
println instance.toString()
}
}
Util.groovy si trova nella stessa cartella come Item.groovy
Quando provo a fare funzionare Util.groovy ricevo il seguente errore:
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)
L'unico modo che ho potuto fare il lavoro era utilizzando groovyc di precompilare Item.groovy, ma questo non coglie il punto di essere Groovy :)
Probabilmente dovresti cambiare 'this.class' in' this.getClass() '. In generale, si consiglia di utilizzare il metodo completo per evitare [ricerche di proprietà o di mappe (o invocare le sovrascritture del metodo)] (http://groovy.329449.n5.nabble.com/class-vs-getClass-td368617.html). – OverZealous
Perché preoccuparsi quando sappiamo che questa non è una mappa? Abbraccia la dinamica! ;-) –
Ha funzionato! Grazie Tim! :) –