小编Mig*_*dal的帖子

从String动态实例化类的Groovy方法

关于动态调用静态方法的Groovy方法这个问题的答案非常有用,但我遇到以下情况时遇到问题:

我定义了一个简单的Groovy类:

class Item {
  def id = 1
  def data = [ "a", "b" ]
}
Run Code Online (Sandbox Code Playgroud)

然后我定义了一个想要动态加载Item类的简单实用程序类:

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

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)
Run Code Online (Sandbox Code Playgroud)

我可以使它工作的唯一方法是使用groovyc来预编译Item.groovy,但这忽略了Groovy :)

groovy

24
推荐指数
2
解决办法
2万
查看次数

标签 统计

groovy ×1