5

JavaプログラムでJavascriptを使用してスクリプトを作成しようとしています。JavascriptでJavaコレクションを反復処理する方法が見つかりませんでした。コレクションに対してiterator()メソッドを呼び出すと、要素の代わりにメソッド名を取得します。

サンプルコードは次のとおりです。

function getValue(row, components) {
    var apartment = components.get(0);
    var rooms = apartment.getRooms();
    for (var room in rooms.iterator()) {
        println(room);
    }
    return rooms.toString();
}

Apartment.getRooms()は部屋のコレクションを返します。この関数によって返される値を調べると、その内容が正しいことがわかりますが、出力される値はメソッド名です。

次のように、JavaプログラムからJavascriptを呼び出します。

getInvocable().invokeFunction("getValue", row, components);
4

2 に答える 2

7

次のように反復すると、次のようになります。

function getValue(row, components) {
    var apartment = components.get(0);
    var rooms = apartment.getRelated();
    for (var iterator = rooms.iterator(); iterator.hasNext();) {
        var room = iterator.next();
        println(room);
    }
    return rooms.toString();
}

できます。

于 2013-01-16T13:40:30.803 に答える
4

使用するには、最初に配列for inに変換する必要があります。

Collection<String> coll = Arrays.asList("foo", "bar", "baz");

String script = "var arr = coll.toArray();\n"
    + "for(var idx in arr) println(arr[idx]);\n";

ScriptEngine engine = new ScriptEngineManager()
    .getEngineByName("ECMAScript");
engine.getContext().setAttribute("coll", coll, ScriptContext.ENGINE_SCOPE);
engine.eval(script);

それ以外の場合は、オブジェクトのプロパティを反復処理します。

Rhino 1.7 以降を使用している場合は、非標準のイテレータ サポートを使用できます。

for (i in Iterator(coll)) print(i);
于 2013-01-16T13:48:21.503 に答える