2017-07-13 6 views
0

GroovyスクリプトとJavaを使用しています。 groovyスクリプトからJavaクラス(A)の複数のインスタンスを作成し、リストに渡してから、このリストを新しいクラス(B)に渡そうとしています。Groovyスクリプトを使用してJavaクラスのインスタンスを作成します。

私のBのjavaファイルは次のとおりです。

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

私のAの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クラスのため:私はGroovyのJavaへ追加してい

が を初期化ファイルbinding.setVariable( "a"、new A());

私はAの3つのオブジェクトを取得していますが、すべてが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)としてそれを行うには他の方法があるが、それはありますとにかくメインプログラムがスクリプトが何をするのか分からないので、インポートを書き込む方が良い(イモ)。

TL:DR

私は担当者の希望:D

関連する問題