首页 > 解决方案 > GraalVM 如何将 java List 对象传输到 javascript,以便我可以在它们上制作 .push() 和 .forEach()?

问题描述

问题是当我尝试将 java List (ArrayList) 对象作为 ProxyArray (ProxyArray.fromList()) 传输到 javascript 时,它不能与 .forEach 和 .push 一起使用。此外,如果我按原样传输 java List 对象,它可以与 .forEach 一起使用,但不能与 .push 一起使用。有什么解决办法吗?

这是要点https://gist.github.com/okrean/5d6978bac15f257b90f581f371769935

标签: javascriptjavagraalvm

解决方案


一个实例java.util.ArrayList在某些方面表现得像一个 JS 数组,然而,实例的java.util.ArrayList原型没有设置为 Array.prototype。

这就是为什么push在你的值上找不到函数的原因,而forEach被调用的函数实际上是forEach在 Java 对象上找到的函数,而不是forEach来自 JS 数组的函数。

一种解决方法是在JS 中java.util.ArrayList手动将其转换为 JS 数组Java.from(value)

另见本期的讨论。


推荐阅读