Как использовать java-объект ArrayList, переданный в движок javascript Rhino?

Следующие данные:

sku=[111222]

передается в качестве аргумента функции javascript, вызываемой в движке javascript Rhino.

На стороне java (откуда берутся данные) это означает, что ключ строки «sku» сопоставляется с ArrayList с одной строкой «111222» внутри него.

Как только это перейдет на сторону Rhino, я понятия не имею, как использовать это как объект javascript. Например: как мне сделать что-то столь же простое, как получение значения 111222 на стороне JS?

Я решил выложить, как выглядел дамп ключ/значение этого объекта на стороне 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)
*/}

Может ли кто-нибудь сказать мне, как работать с такими объектами в движке Rhino javascript?


person pulkitsinghal    schedule 23.09.2011    source источник


Ответы (1)


Программа JavaScript получает Java ArrayList; вот почему приведенный выше дамп соответствует API java.util.ArrayList. (См. документацию по Java API.) может относительно прозрачно вызывать методы Java этого объекта Java из кода JavaScript. Так, например, для перебора элементов массива, который вы получаете:

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

Предостережение: если предположить, что ArrayList создан на стороне Java и создает объекты Java, приведенный выше алгоритм поместит Java java.lang.String в переменную nextElement. Этот объект может вести себя странно, если ваше приложение ориентировано на JavaScript (например, typeof(nextElement) == "object" /* not "string" */). Если вам нужна строка JavaScript, вам нужно ее преобразовать; самый простой способ String(nextElement).

person David P. Caldwell    schedule 24.09.2011