使用 Groovy 脚本创建 java class 的实例
Create instances of java class using Groovy script
我正在使用 Groovy 脚本和 Java,我是这个主题的新手。
我正在尝试从 groovy 脚本创建 java class (A) 的多个实例并将它们传递给列表,然后将此列表传递给新的 class (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)
当我 运行 我的应用程序时,我不断收到此异常
线程中的异常 "main" groovy.lang.MissingPropertyException: 没有这样的 属性: A for class: file
当我将 A 添加到 java groovy 初始化
binding.setVariable("a", 新 A());
我在列表中得到 A 的 3 个对象,但它们都在 num 中包含值 3(可能列表中的所有 3 个对象都是同一个对象)。
感谢所有帮助我解决这个问题的人。
既然我已经测试过了,那就把它写下来作为答案吧:
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:博士
我只想要代表 :D
我正在使用 Groovy 脚本和 Java,我是这个主题的新手。 我正在尝试从 groovy 脚本创建 java class (A) 的多个实例并将它们传递给列表,然后将此列表传递给新的 class (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)
当我 运行 我的应用程序时,我不断收到此异常 线程中的异常 "main" groovy.lang.MissingPropertyException: 没有这样的 属性: A for class: file
当我将 A 添加到 java groovy 初始化 binding.setVariable("a", 新 A());
我在列表中得到 A 的 3 个对象,但它们都在 num 中包含值 3(可能列表中的所有 3 个对象都是同一个对象)。
感谢所有帮助我解决这个问题的人。
既然我已经测试过了,那就把它写下来作为答案吧:
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:博士
我只想要代表 :D