Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
groovy脚本可以从Java或groovy超类继承吗?_Java_Groovy - Fatal编程技术网

groovy脚本可以从Java或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

以下是脚本(Scccc.groovy):

下面是超类:

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.'