groovy脚本可以从Java或groovy超类继承吗?
以下是脚本(Scccc.groovy): 下面是超类:groovy脚本可以从Java或groovy超类继承吗?,java,groovy,Java,Groovy,以下是脚本(Scccc.groovy): 下面是超类: class ScriptGroovyParent { public ScriptGroovyParent() { // TODO Auto-generated constructor stub } // public String queryThisBaby(String query){ // // return query +" was run."; // } def
class ScriptGroovyParent {
public ScriptGroovyParent() {
// TODO Auto-generated constructor stub
}
// public String queryThisBaby(String query){
//
// return query +" was run.";
// }
def queryThisBaby(name) {
return name +" was run."
}
}
但我在尝试运行脚本时出错
Caught: groovy.lang.MissingMethodException: No signature of method: scripts.Scccc.queryThisBaby() is applicable for argument types: (java.lang.String) values: [my query]
groovy.lang.MissingMethodException: No signature of method: scripts.Scccc.queryThisBaby() is applicable for argument types: (java.lang.String) values: [my query]
at scripts.Scccc.run(Scccc.groovy:5)
这是怎么回事?脚本可以使用扩展基类。这里需要注意的是,基类必须像groovy脚本一般扩展脚本一样进行扩展,并且在“is-a”关系中不能有多个继承
//ScriptGroovyParent.groovy
abstract class ScriptGroovyParent extends Script{
def queryThisBaby(name) {
return name +" was run."
}
}
//Script Scccc.groovy
import org.codehaus.groovy.control.CompilerConfiguration
def configuration = new CompilerConfiguration()
configuration.setScriptBaseClass("ScriptGroovyParent")
def shell = new GroovyShell(this.class.classLoader, new Binding(), configuration)
assert shell.evaluate("queryThisBaby('My Query')") == 'My Query was run.'
如果它们都位于不同的包中,则可以导入该包。谢谢,但是脚本类中的@Override public Object run(){return null;}方法如何呢?该方法在脚本中被重写。在上述情况下,创建shell并计算表达式的脚本(通常是groovy脚本)将始终是可运行的,并在脚本的
run()
下运行。如果您希望确保始终以这种方式执行,而不是从父级执行,请将ScriptGroovyParent
声明为abstract
@亚历克斯米尔斯
//ScriptGroovyParent.groovy
abstract class ScriptGroovyParent extends Script{
def queryThisBaby(name) {
return name +" was run."
}
}
//Script Scccc.groovy
import org.codehaus.groovy.control.CompilerConfiguration
def configuration = new CompilerConfiguration()
configuration.setScriptBaseClass("ScriptGroovyParent")
def shell = new GroovyShell(this.class.classLoader, new Binding(), configuration)
assert shell.evaluate("queryThisBaby('My Query')") == 'My Query was run.'