【发布时间】:2012-12-21 16:21:17
【问题描述】:
我有两节课。 One.groovy:
class One {
One() {}
def someMethod(String hey) {
println(hey)
}
}
还有两个.groovy:
class Two {
def one
Two() {
Class groovy = ((GroovyClassLoader) this.class.classLoader).parseClass("One.groovy")
one = groovy.newInstance()
one.someMethod("Yo!")
}
}
我用这样的东西实例化两个:
GroovyClassLoader gcl = new GroovyClassLoader();
Class cl = gcl.parseClass(new File("Two.groovy"));
Object instance = cl.newInstance();
但现在我得到groovy.lang.MissingMethodException: No signature of method: script13561062248721121730020.someMethod() is applicable for argument types: (java.lang.String) values: [Yo!]
有什么想法吗?
【问题讨论】:
-
parseClass(String)期望脚本/类的文本作为其参数,而不是文件名。因此,您正在编译一个包含单个语句的脚本,该语句获取名为One的绑定变量,然后尝试获取其groovy属性的值。 -
我假设你知道你可以说“def one=new One()”...?
-
@BillK 当然。我在本地示例中使用了
one作为实例变量,它只是卡在这里。 -
我的意思是你根本不需要使用 GroovyClassLoader,如果你从两个调用 new One() 并且 .groovy 文件在类路径中,它就可以工作。
标签: class groovy classloader instance