当前位置: 首页 > 知识库问答 >
问题:

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

池俊茂
2023-03-14

我在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中定义一个函数,以及为什么我的代码不能工作。

共有1个答案

刘昌翰
2023-03-14

当您使用GroovyShell#evaluate时,shell将整个脚本编译成一个JVM类,加载并运行它,然后返回结果。这个过程对于每个evalue调用都是独立的(请注意,类的名称是script2;该方法是在script1中定义的),因此您的方法在第二次调用中不可用。

解决这个问题的方法包括在计算之前进行简单的字符串连接(这适用于您自己的脚本,但如果脚本中的某些内容调用return),则可能会出现问题),或者使用更复杂的GroovyScriptEngine

 类似资料:
  • 问题内容: 例: 我发现上面的代码在Java中是完全合法的。我有以下问题。 在方法内部拥有类定义的用途是什么? 是否会为生成一个类文件 我很难以面向对象的方式来想象这个概念。在行为中具有类定义。也许有人可以用等效的真实例子告诉我。 方法中的抽象类对我来说听起来有点疯狂。但不允许使用任何接口。这背后有什么原因吗? 问题答案: 这称为本地课程。 2很简单:是的,将生成一个类文件。 1和3是同一个问题。

  • 我正在寻找一些帮助来优化我的代码并使用更少的行数编写它。我有一个Class say A,它有几个定义的方法,如下所示: 现在我有一个单独的类,比如B和方法,编写如下 所有这些代码都运行良好。我只是想看看是否有更好的方法可以继续调用像objA这样的方法。verifyMyMethods()中的doSomethingA(),因此我可以使用更少的代码行来完成相同的工作。 我想在循环中调用方法doSomet

  • 我想用jaspersoft Studio创建一个非常简单的jasper报告。我想使用groovy函数来返回一个将包含在我的报告中的字符串。 问题是我真的不知道如何将groovy文件与jrxml文件链接起来。 有什么想法吗? 这是代码,你会注意到我试图调用函数: Blank_A4.jrxml文件: Blank_A4.groovy文件: 这两个文件位于我的项目的同一文件夹中。

  • 我是一名新的Java开发人员,在Java中继承的概念定义我的类时遇到了一些困难。。。 在一方面,我有一个通用的类,名为车辆,它定义了几十年的属性(带有它们的getter/setters)。我有一个扩展车辆类的车辆1类。 另一方面,我有一个名为VehicleFactory的泛型类,它定义了一个静态方法,如下所示: 问题是我想创建一个Vehicle1Factory类,它有自己的makeResult方法

  • 在阅读了许多文章之后,我被困在这个非常简单的任务上。 我有一个只有两个文件的沙盒项目: src/main/groovy/classes/foo 和src/main/groovy/脚本/script.groovy 现在,如果我运行命令: 我得到以下错误: 如何在我的脚本script.groovy中使用我的类Foo?

  • 本文向大家介绍在Java编程中定义方法,包括了在Java编程中定义方法的使用技巧和注意事项,需要的朋友参考一下 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。 返回值类型 :方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,retur