Why can't I instantiate a Groovy class from another Groovy class?

时光怂恿深爱的人放手 提交于 2019-12-07 08:20:43

问题


I have two classes. One.groovy:

class One {

  One() {}

  def someMethod(String hey) {
    println(hey)
  }
}

And Two.groovy:

class Two {

  def one

  Two() {
    Class groovy = ((GroovyClassLoader) this.class.classLoader).parseClass("One.groovy")
    one = groovy.newInstance()
    one.someMethod("Yo!")
  }
}

I instantiate Two with something like this:

GroovyClassLoader gcl = new GroovyClassLoader();
Class cl = gcl.parseClass(new File("Two.groovy"));
Object instance = cl.newInstance();

But now I get groovy.lang.MissingMethodException: No signature of method: script13561062248721121730020.someMethod() is applicable for argument types: (java.lang.String) values: [Yo!]

Any ideas?


回答1:


Seems like it is occurring due to the groovy class loader method being called: the string one is to parse a script in text format. Using the File one worked here:

class Two {

  def one

  Two() {
    Class groovy = ((GroovyClassLoader) this.class.classLoader).parseClass("One.groovy")
    assert groovy.superclass == Script // whoops, not what we wanted

    Class groovy2 = ((GroovyClassLoader) this.class.classLoader).parseClass new File("One.groovy")
    one = groovy2.newInstance()
    assert one.class == One // now we are talking :-)


    one.someMethod("Yo!") // prints fine

  }
}


来源:https://stackoverflow.com/questions/13993611/why-cant-i-instantiate-a-groovy-class-from-another-groovy-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!