Les réponses de this question about the Groovy way to dynamically invoke a static method étaient très serviables mais je ne parviens pas le cas suivant:manière Groovy dynamiquement instancier une classe de chaîne
Je définis une simple classe Groovy:
class Item {
def id = 1
def data = [ "a", "b" ]
}
Je puis définir une classe simple utilitaire qui veut charger dynamiquement la classe de l'objet:
class Util {
static def main(args) {
def cls = "Item" as Class
def instance = cls.newInstance()
println instance.toString()
}
}
Util.groovy se trouve dans le même dossier que Item.groovy
Lorsque je tente de lancer Util.groovy je reçois l'erreur suivante:
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 seule façon que je pouvais le faire fonctionner à l'aide était groovyc à précompiler Item.groovy, mais cela manque le point d'être Groovy :)
Vous devriez probablement remplacer 'this.class' par' this.getClass() '. Il est généralement recommandé d'utiliser la méthode complète pour éviter les [recherches de propriétés ou de cartes (ou les substitutions invokeMethod)] (http://groovy.329449.n5.nabble.com/class-vs-getClass-td368617.html). – OverZealous
Pourquoi s'embêter quand on sait que ce n'est pas une carte? Embrassez la dynamique! ;-) –
Ça a marché! Merci Tim! :) –