Как преобразовать массивы JavaScript носорога в Массивы Java

sql уже позволяет изменять Вашу схему: команда ALTER.

просто имеют таблицу, которая перечисляет поля, которые пользователям не разрешают изменить и записать, что хороший интерфейс для ИЗМЕНЯЕТСЯ.

17
задан Jason S 8 April 2011 в 18:16
поделиться

2 ответа

NativeArray arr = (NativeArray) result;
Object [] array = new Object[(int) arr.getLength()];
for (Object o : arr.getIds()) {
    int index = (Integer) o;
    array[index] = arr.get(index, null);
}
23
ответ дан 30 November 2019 в 11:27
поделиться

Если Javascript находится под вашим контролем, вы можете выполнить преобразование в соответствии с этого документа . Итак, чтобы адаптировать ваш пример, например:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval("function getArray() {return [1,2,3,4,5];};");
String convertFuncSrc =
     "function convertArray(type, arr) {"
   + "  var jArr = java.lang.reflect.Array.newInstance(type, arr.length);"
   + "  for (var i = 0; i < arr.length; i++) { "
   + "    jArr[i] = arr[i];"
   + "  }"
   + "  return jArr;"
   + "};";
jsEngine.eval(convertFuncSrc);
Object result = jsEngine.eval("convertArray(java.lang.Integer.TYPE, getArray());");
int[] javaArray = (int[])result;

Хотя, если вы не можете изменить Javascript, этот подход не будет работать, и у вас [i] будет [/ i] экземпляр sun.org.mozilla.javascript .internal.NativeArray в качестве переменной результата . В этот момент, я думаю, вам просто нужно преобразовать его и работать с ним напрямую, используя любые публичные методы, которые он предоставляет; наверное, это не красиво, но других вариантов я не вижу. В частности, я думаю, что единственное, что вы можете гарантировать на хорошем уровне Rhino, - это то, что это будет экземпляр Scriptable (и, вероятно, ScriptableObject ), что не поможет вам его использовать. как массив.

Кевин '

8
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: