【问题标题】:Create instances of java class using Groovy script使用 Groovy 脚本创建 java 类的实例
【发布时间】:2017-07-13 22:02:51
【问题描述】:

我正在使用 Groovy 脚本和 Java,我是这个主题的新手。 我正在尝试从 groovy 脚本创建一个 java 类 (A) 的多个实例并将它们传递给列表,然后将此列表传递给一个新类 (B)。

我的 B java 文件是:

public class B {
 public void getValues(List<A> values) {...}
}

我的一个java文件是:

public class A {
 public long num;

 public A(long num){
  this.num = num;
 }
}

我的主要 java 文件是:

GroovyScriptEngine groovyScriptEngine = new GroovyScriptEngine(/*path to     file.groovy*/);
Binding binding = new Binding();
binding.setVariable("b", new B());
groovyScriptEngine.run("file.groovy", binding);

我的 file.groovy 是:

def myList = []
myList.add(new A(1))
myList.add(new A(2))
myList.add(new A(3))

b.getValues(myList)

我在运行我的应用程序时不断收到此异常 线程“主”groovy.lang.MissingPropertyException 中的异常:没有这样的属性:A 用于类:文件

当我将 A 添加到 java groovy 初始化时 binding.setVariable("a", new A());

我在列表中加入了 A 的 3 个对象,但它们都在 num 中包含值 3(可能列表中的所有 3 个对象都是同一个对象)。

感谢我为解决这个问题而获得的所有帮助。

【问题讨论】:

  • 导入.path.to.my.classes.A; // 附带说明一下,您可能应该将函数“getValues”重命名为“setValues”,但我只能假设没有实现
  • 工作感谢您的帮助,getValues 仅用于示例,但您是对的

标签: java groovy groovyscriptengine


【解决方案1】:

既然我已经测试过了,让我们把它写下来作为答案:

import path.to.my.classes.A; // this is required

def myList = []
myList.add(new A(1))
myList.add(new A(2))
myList.add(new A(3))

b.setValues(myList)

还有其他方法可以做到这一点,例如您可以通过绑定 (iirc) 传递的自动导入,但最好还是 (imo) 编写导入,因为主程序可能不知道脚本会做什么.

tl:dr

我只想要代表:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2023-02-22
    • 2014-10-04
    相关资源
    最近更新 更多