Groovy スクリプトの継承に問題があります。Groovy スクリプトが、このスクリプトを呼び出す Java クラスからメソッドを継承するようにします。
たとえば、次のようなものがあります。
public class SimpleTest extends TestCase {
public void test(){
CompilerConfiguration configuration = new CompilerConfiguration();
configuration.setScriptBaseClass(this.getClass().getName());
GroovyShell shell = new GroovyShell(this.getClass().getClassLoader(), new Binding(), configuration);
shell.evaluate("println sayHello()");
}
public String sayHello(){
return "Hello";
}
}
エラーは次のとおりです。
org.codehaus.groovy.control.MultipleCompilationErrorsException: 起動に失敗しました: Script1.groovy: 1: 宣言された型 com.test.SimpleTest は groovy.lang.Script クラスを拡張しません! @ 行 1、列 1。println sayHello() ^ 1 エラー
他のクラスを継承できない場合、どうすればこれを行うことができますか? スーパークラスと同じようにメソッドを呼び出したい。
編集
クラスを次のように変更しました。
public class CmTest extends TestCase {
public void test(){
GroovyHandler handler = new GroovyHandler();
handler.run();
}
public String sayHello(){
return "Hello";
}
public class GroovyHandler extends Script {
public GroovyHandler(){
}
@Override
public Object run() {
CompilerConfiguration configuration = new CompilerConfiguration();
configuration.setScriptBaseClass(this.getClass().getName());
GroovyShell shell = new GroovyShell(CmTest.class.getClassLoader(), new Binding(), configuration);
return shell.evaluate("println sayHello()");
}
}
}
エラーは次のとおりです。
java.lang.NoSuchMethodError: com.test.SimpleTest$GroovyHandler: メソッド < init >() V が Script1.(Script1.groovy) で見つかりません。 newInstance(NativeConstructorAccessorImpl.java:39) の sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) の java.lang.reflect.Constructor.newInstance(Constructor.java:513) の java.lang.Class.newInstance0(Class) .java:355) で java.lang.Class.newInstance(Class.java:308) で org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:429) で groovy.lang.GroovyShell.parse(GroovyShell. java:704) で groovy.lang.GroovyShell.evaluate(GroovyShell.java:588) で groovy.lang.GroovyShell で。評価(GroovyShell.java:627) at groovy.lang.GroovyShell.evaluate(GroovyShell.java:598) ...