我在javax.scripting地圖實現中看到一些奇怪的行爲。在javax.scripting JavaScript環境中導入地圖
在線示例顯示了JS的環境中添加到列表的example:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
List<String> namesList = new ArrayList<String>();
namesList.add("Jill");
namesList.add("Bob");
namesList.add("Laureen");
namesList.add("Ed");
jsEngine.put("namesListKey", namesList);
System.out.println("Executing in script environment...");
try
{
jsEngine.eval("var names = namesListKey.toArray();" + "for(x in names) {" + " println(names[x]);" + "}"
+ "namesListKey.add(\"Dana\");");
} catch (ScriptException ex)
{
ex.printStackTrace();
}
System.out.println(namesList);
但是,如果你試圖做一個地圖類似的東西,你看到奇怪的行爲。首先,如果你嘗試迭代地圖鍵,例如
HashMap<String, Object> m = new HashMap<String, Object>();
jsEngine.put("map", m);
有沒有辦法來獲得地圖鍵 - 如果你試圖通過按鍵進行迭代,你的方法業者名稱
jsEngine.eval(" for (var k in m.keySet()){ println(k)};");
結果:
notifyAll
removeAll
containsAll
contains
empty
equals
...
在JS上下文中,可以使用m.get(key)
而不是m[key]
來映射地圖中的值,如果該鍵不存在,則會引發錯誤。任何人都可以對這種行爲有所瞭解,或者它是否被破壞?謝謝。
這很有趣。它可能會遍歷對象keySet(在Rhino中你可以循環方法),但我不確定。我將不得不嘗試 – TheLQ 2010-08-13 21:41:51