Я использую Groovy в своей программе, потому что мне нужно запустить некоторые фрагменты кода, сгенерированные строкой. В этом очень простом примере я покажу свою проблему, связанную с очень известной ошибкой в Groovy.Как бороться с groovy.lang.MissingMethodException
public static void main(String[] args) {
Binding binding = new Binding();
GroovyShell shell = new GroovyShell(binding);
path(Arrays.asList("A", "B", "C"), Arrays.asList("A", "B"));
String s = "path(Arrays.asList(\"A\", \"B\", \"C\"), Arrays.asList(\"A\", \"B\"))";
Object value = shell.evaluate(s);
}
private static List<String> path(List<String> dstString, List<String> srcString) {
System.out.println("it works!");
return dstString;
}
я передать рядный двух списков с помощью: Arrays.asList ("A", "B", "C"), Arrays.asList ("А", "Б"). Когда я вызываю путь функции с встроенными параметрами без привлечения Groovy, он работает. Но, когда я точно такой же, но с помощью Groovy, он терпит неудачу и возвращает следующую ошибку:
Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: Script1.path() is applicable for argument types: (java.util.Arrays$ArrayList, java.util.Arrays$ArrayList) values: [[A, B, C], [A, B]]
Possible solutions: wait(), any(), with(groovy.lang.Closure), each(groovy.lang.Closure), run(), run()
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)
at Script1.run(Script1.groovy:1)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:585)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:623)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:594)
at Test.main(Test.java:16)
Я пытаюсь выяснить, почему не работает и как ее решить. Есть ли предложения?
Я не знаю точно, как это исправить, но он не работает, потому что скрипт не выполняется в контексте этого класса, он скомпилирован в собственный класс ('Script1'). – chrylis