这是脚本(Scccc.groovy):
import scriptParents.ScriptGroovyParent
println(queryThisBaby("my query"));
Run Code Online (Sandbox Code Playgroud)
这是超类:
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."
}
}
Run Code Online (Sandbox Code Playgroud)
但是在尝试运行脚本时出现错误。
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)
Run Code Online (Sandbox Code Playgroud)
怎么会这样?
脚本可以使用CompilerConfiguration扩展基类。这里需要注意的是,基类必须扩展Script,因为 groovy 脚本通常扩展 Script,并且您不能在“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.'
Run Code Online (Sandbox Code Playgroud)
如果它们位于不同的包中,您可以导入该包。
| 归档时间: |
|
| 查看次数: |
3508 次 |
| 最近记录: |