0
我在我的程序中使用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( 「A」, 「B」)。當我使用內聯參數調用函數路徑而不涉及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