0
文字列で生成されたコードを実行する必要があるため、Groovyをプログラムで使用しています。 この非常に単純な例では、Groovyのよく知られたエラーに関連する私の問題を示します。 は、Arrays.asList( "A"、 "B"、 "C")は、Arrays.asList( "A"、 "B"):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;
}
Iは、インラインを2つのリストの使用を渡します。私が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