Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用的Groovy中定义方法_Java_Methods_Groovy - Fatal编程技术网

在Java中使用的Groovy中定义方法

在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

我在Java
类中使用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
评估中评估所有脚本时,这就行了,谢谢你谢谢你这就是问题所在,你的回答也很有帮助