在Java中使用的Groovy中定义方法
我在Java在Java中使用的Groovy中定义方法,java,methods,groovy,Java,Methods,Groovy,我在Java类中使用Groovy解释器,我试图定义一个方法并调用它,下面是我的代码: Binding binding = new Binding(); binding.setVariable("aa", 1); binding.setVariable("bb", 2); GroovyShell shell = new GroovyShell(binding); shell.evaluate("int add(int
类中使用Groovy解释器,我试图定义一个方法并调用它,下面是我的代码:
Binding binding = new Binding();
binding.setVariable("aa", 1);
binding.setVariable("bb", 2);
GroovyShell shell = new GroovyShell(binding);
shell.evaluate("int add(int a,int b){return (a+b)}");
int value =(int) shell.evaluate("add(aa,bb);");
System.out.println(value);
我有一个错误:
线程“main”groovy.lang.MissingMethodException中的异常:否
方法:Script2.add()的签名适用于参数类型:
(java.lang.Integer,java.lang.Integer)值:[1,2]可能
解决方案:any(),wait(),run(),run(),find(),wait(long,int)
请告诉我如何在groovy中定义函数,以及为什么我的代码不能工作
非常感谢,当您使用GroovyShell#evaluate
时,shell将整个脚本编译到一个JVM类中,加载并运行它,然后返回结果。此过程对于每个求值调用都是独立的(请注意,类的名称是Script2
;方法是在Script1
中定义的),因此您的方法在第二次调用中不可用
解决此问题的选项包括在求值之前进行简单的字符串连接(这将适用于您自己的脚本,但如果脚本中的某些内容调用return
),或使用更复杂的字符串连接,则可能会出现问题。如果将所有Groovy代码粘贴到单个字符串中并求值一次,会发生什么?基于类名Script2
,我认为shell会独立处理每个evaluate
调用。@chrylis你是对的,当我在一次shell
评估中评估所有脚本时,这就行了,谢谢你谢谢你这就是问题所在,你的回答也很有帮助