2017-07-13 34 views
0

我正在使用Groovy腳本和Java,我對這個主題很陌生。 我想從groovy腳本創建一個java類(A)的多個實例,並將它們傳遞給列表,然後將此列表傳遞給一個新類(B)。使用Groovy腳本創建java類的實例

我乙的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:沒有這樣的特性:一類:文件

當我增加了對Java常規初始化 binding.setVariable(「a」,new A());

我收到列表中的3個對象A,但它們都包含num中的值3(可能列表中的所有3個對象都是同一個對象)。

感謝我能解決這個問題的所有幫助。

+1

進口the.path.to.my.classes.A; //在一個側面說明中,你應該重命名你的函數「getValues」爲「setValues」,但我只能假設沒有 – Wietlol

+0

的實現感謝你的幫助,getValues只是爲了這個例子,但你是對的 –

回答

0

現在,我測試了,讓我們把它寫下來,答案:

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