如何使用传递给Rhino javascript引擎的ArrayList java对象?

pul*_*hal 2 javascript rhino

以下数据:

sku=[111222]
Run Code Online (Sandbox Code Playgroud)

正在作为参数传递给在Rhino javascript引擎中调用的javascript函数.

在java端(数据源自此处)这意味着"sku"的String键被映射到其中包含一个字符串"111222"的ArrayList.

一旦这转到了Rhino方面,我不知道如何将其用作javascript对象.例如:我如何做一些简单的事情就像在JS端获取111222值一样简单?

我决定吐出这个对象的键/值转储在JS方面的样子,这就是我得到的:

sku=

empty: false

indexOf: function indexOf() {/*
int indexOf(java.lang.Object)
*/}

notifyAll: function notifyAll() {/*
void notifyAll()
*/}

removeAll: function removeAll() {/*
boolean removeAll(java.util.Collection)
*/}

trimToSize: function trimToSize() {/*
void trimToSize()
*/}

containsAll: function containsAll() {/*
boolean containsAll(java.util.Collection)
*/}

contains: function contains() {/*
boolean contains(java.lang.Object)
*/}

equals: function equals() {/*
boolean equals(java.lang.Object)
*/}

notify: function notify() {/*
void notify()
*/}

subList: function subList() {/*
java.util.List subList(int,int)
*/}

class: class java.util.ArrayList
set: function set() {/*
java.lang.Object set(int,java.lang.Object)
*/}

isEmpty: function isEmpty() {/*
boolean isEmpty()
*/}

add: function add() {/*
void add(int,java.lang.Object)
boolean add(java.lang.Object)
*/}

ensureCapacity: function ensureCapacity() {/*
void ensureCapacity(int)
*/}

size: function size() {/*
int size()
*/}

iterator: function iterator() {/*
java.util.Iterator iterator()
*/}

clear: function clear() {/*
void clear()
*/}

wait: function wait() {/*
void wait()
void wait(long)
void wait(long,int)
*/}

listIterator: function listIterator() {/*
java.util.ListIterator listIterator(int)
java.util.ListIterator listIterator()
*/}

retainAll: function retainAll() {/*
boolean retainAll(java.util.Collection)
*/}

toString: function toString() {/*
java.lang.String toString()
*/}

hashCode: function hashCode() {/*
int hashCode()
*/}

toArray: function toArray() {/*
java.lang.Object[] toArray(java.lang.Object[])
java.lang.Object[] toArray()
*/}

lastIndexOf: function lastIndexOf() {/*
int lastIndexOf(java.lang.Object)
*/}

addAll: function addAll() {/*
boolean addAll(java.util.Collection)
boolean addAll(int,java.util.Collection)
*/}

clone: function clone() {/*
java.lang.Object clone()
*/}

get: function get() {/*
java.lang.Object get(int)
*/}

getClass: function getClass() {/*
java.lang.Class getClass()
*/}

remove: function remove() {/*
java.lang.Object remove(int)
boolean remove(java.lang.Object)
*/}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何在rhino javascript引擎中使用这些对象?

Dav*_*ell 8

JavaScript程序正在接收Java ArrayList; 这就是上面的转储匹配API的原因java.util.ArrayList.(请参阅Java API文档.)您可以从JavaScript代码中相对透明地调用该Java对象的Java方法.因此,例如,循环遍历您正在接收的数组的元素:

var sku = [however you are getting it];
for (var i=0; i<sku.size(); i++) {
    var nextElement = sku.get(i);
    // do something
}
Run Code Online (Sandbox Code Playgroud)

警告:假设ArrayList是在Java端创建的并且正在创建Java对象,上面的算法会将Java java.lang.String放入nextElement变量中.如果您的应用程序是以JavaScript为中心的(例如,typeof(nextElement) == "object" /* not "string" */),则此对象可能会出现奇怪的行为.如果你想要一个JavaScript字符串,你需要转换它; 最简单的方法是String(nextElement).