Как использовать Java-объект ArrayList, переданный в движок javascript Rhino? - PullRequest
2 голосов
/ 23 сентября 2011

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

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 Engine?

1 Ответ

8 голосов
/ 24 сентября 2011

Программа 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, алгоритм выше поставит1007 * Java java.lang.String в переменную nextElement.Этот объект может вести себя странно, если ваше приложение ориентировано на JavaScript (например, typeof(nextElement) == "object" /* not "string" */).Если вам нужна строка JavaScript, вам нужно ее преобразовать;самый простой способ это String(nextElement).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...