5

这是脚本(Scccc.groovy):

import scriptParents.ScriptGroovyParent

println(queryThisBaby("my query"));

这是超类:

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)

怎么会这样?

4

1 回答 1

3

脚本可以使用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.'

如果它们都位于不同的包中,则可以导入包。

于 2013-10-11T03:57:42.880 回答