我刚开始学习groovy并尝试将我的java代码转换为groovy脚本。通常,java允许您拥有一个只有可以从其他类调用的方法的类。我想把它翻译成groovy。我有一个文件 - 让我们称之为File1-这样的方法:
def retrieveData(String name){
// do something
}
在第二个文件File2中,我像这样调用File1:
def file1Class = this.class.classLoader.parseClass(new File("../File1.groovy"))
然后尝试像这样调用File1中的方法:
def data = file1Class.retrieveData("String")
但它一直给我这个错误--MissingMethodException:
groovy.lang.MissingMethodException: No signature of method: static File1.retrieveData() is applicable for argument types: (java.lang.String) values: [String] Possible solutions: retrieveData(java.lang.String)
所以它确实认识到我发送了正确数量的参数甚至是正确的对象,但它没有运行应该的方法? 有什么我想念的吗?我试图从方法中删除对象定义 - 换句话说 - 像这样:
def retrieveData(name){
// do something
}
但这也不起作用。我对下一步将会是什么一无所知。任何人都可以帮助推动我朝着正确的方向前进吗?我将不胜感激。
答案 0 :(得分:0)
请参阅this StackOverflow reponse中提供的答案。
使用GroovyScriptEngine
class。 GroovyScriptEngine
做了什么?来自文档:
特定的脚本引擎能够重新加载修改过的脚本以及 正确处理依赖脚本。
请参阅下面的示例。
def script = new GroovyScriptEngine( '.' ).with {
loadScriptByName( '..\File1.groovy' )
}
this.metaClass.mixin script
retrieveData()
请注意我们如何使用loadScriptByName
方法
获取有问题的scriptName类,以便您可以 使用缓存和重新加载来实例化Groovy对象。
这将允许您随意访问文件中的Groovy对象。