Отличный способ динамического создания экземпляра класса из String

Ответы на этот вопрос о способе Groovy динамически вызывать статический метод были очень полезны, но у меня возникли проблемы со следующим случаем:

Я определил простой класс Groovy:

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

Затем я определил простой служебный класс, который хочет динамически загружать класс Item:

class Util {
  static def main(args) {
     def cls = "Item" as Class
     def instance = cls.newInstance()
     println instance.toString()
  }
}

Util.groovy находится в той же папке, что и Item.groovy

Когда я пытаюсь запустить Util.groovy Я получаю следующую ошибку:

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)

Единственный способ заставить его работать - это использовать groovyc для предварительной компиляции Item.groovy, но это не похоже на Groovy :)

24
задан Community 23 May 2017 в 12:09
поделиться