首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.ClassCastException:不能将jdk.nashorn.internal.objects.NativeArray转换为java.lang.Comparable

java.lang.ClassCastException:不能将jdk.nashorn.internal.objects.NativeArray转换为java.lang.Comparable
EN

Stack Overflow用户
提问于 2014-04-16 05:02:55
回答 1查看 3.9K关注 0票数 1

使用Nashorn运行JavaScript时

代码语言:javascript
复制
var jsArray = [7,4,1,8,3,2]; 
var list = java.util.Arrays.asList(jsArray);
java.util.Collections.sort(list);
list.forEach(function(el) { print(el) } ); 

我得到了

代码语言:javascript
复制
Exception in thread "main" java.lang.ClassCastException: jdk.nashorn.internal.objects.NativeArray cannot be cast to java.lang.Comparable
at java.util.Collections.sort(Collections.java:170)

那么,在JavaScript中使用JavaScript的方法是什么呢?

更新:

由于Attila,JS和JJS脚本不能同时产生相同的输出。

代码语言:javascript
复制
var jsArray = [1,2,3,4]; 
jsArray.forEach(function(el) { print(el) } ); 


var jsArray = [1,2,3,4];
//var list = java.util.Arrays.asList(jsArray);
var list = Java.to(jsArray, Java.type('java.util.List'))
list.forEach(function(el) { print(el) } ); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-16 06:14:19

使用java.util.Arrays.asList将创建一个数组,其中一个元素是JS数组。JS数组不是Java数组..。

不要使用java.util.Arrays.asList,而是使用Java.to(jsArray, Java.type('java.util.List'))。结果列表将由JS数组支持,因此对其中一个的更改将由另一个数组反映。您还可以使用Java.to(jsArray) (等效于Java.to(jsArray, Java.type('java.lang.Object[]') )将JS数组转换为Java数组。因此,如果您想通过数组转换步骤,可以使用java.util.Arrays.asList(Java.to(jsArray));

通常,在Java方法签名指定数组参数的大多数情况下,Nashorn将自动将JS数组转换为Java数组,因此您不必显式地使用Java.to()。不幸的是,Arrays.asList(T...)是一个vararg方法,因此对于如何处理该参数存在一些模糊性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23100392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档