gpt4 book ai didi

javascript - 使用 Nashorn 遍历数组

转载 作者:行者123 更新时间:2023-11-29 17:50:04 25 4
gpt4 key购买 nike

当使用 java 的内置 javascript 解释器时,为什么我可以使用 Arrays.forEach() 遍历 java List 而不是遍历 native 数组?我有以下测试代码

var ArrayList = Java.type('java.util.ArrayList');
var list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');

var StringArray = Java.type("java.lang.String[]");
var array = new StringArray(3);
array[0] = "A";
array[1] = "B";
array[2] = "C";

list.forEach(function(v) { print(v); });
array.forEach(function(v) { print(v); });

我希望打印出来

a b c A B C

但是我得到了

a b c

TypeError: [Ljava.lang.String;@644e4fbf has no such function "forEach" in at line number 14

以下有效,但为什么 array.forEach() 无效?

for (var i=0; i<array.length; ++i)
print(array[i]);

我遇到的问题是我的 javascript 代码想要调用大量返回 String[] 的 java 函数,并且我想像处理常规 javascript 数组一样处理结果对象。有没有比在 java 中编写大量包装函数来将我的数组转换为 ArrayList 更简单的方法来解决这个问题?

最佳答案

当您在 Java List 上调用 forEach 时,您正在调用从 Iterable 继承的 List 的 forEach 方法。 . Nashorn 支持在需要 @FunctionalInterface 对象时传递脚本函数,因此您可以将函数作为 Consumer 的参数传递范围。 Java 数组上没有这样的 forEach Java 方法,因此第二个 forEach 方法调用失败。

请注意 JavaScript Array.prototype 的 Nashorn 实现。 forEach是通用的。它适用于 Java 数组,也适用于列表。我调整了您的脚本以将 Array.prototype.forEach 用于 Java List 和 java String 数组。

var ArrayList = Java.type('java.util.ArrayList');
var list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');

var StringArray = Java.type("java.lang.String[]");
var array = new StringArray(3);
array[0] = "A";
array[1] = "B";
array[2] = "C";

var forEach = Array.prototype.forEach;

forEach.call(list, function(v) { print(v); });
forEach.call(array, function(v) { print(v); });

关于javascript - 使用 Nashorn 遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44833161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com