简体   繁体   English

java.lang.ClassCastException:jdk.nashorn.internal.objects.NativeArray无法转换为java.lang.Comparable

[英]java.lang.ClassCastException: jdk.nashorn.internal.objects.NativeArray cannot be cast to java.lang.Comparable

While running JavaScript with Nashorn 使用Nashorn运行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) } ); 

i got 我有

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)

So is the way to use Java Collections in JavaScript? 那么在JavaScript中使用Java集合的方法是吗?

UPDATE: 更新:

Thanks to Attila, not both JS and JJS script produce the same output 感谢Attila,并非JS和JJS脚本都能产生相同的输出

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) } ); 

Using java.util.Arrays.asList will create an array with a single element being the JS array. 使用java.util.Arrays.asList将创建一个数组,其中一个元素是JS数组。 JS arrays aren't Java arrays... JS数组不是Java数组...

Instead of java.util.Arrays.asList , use Java.to(jsArray, Java.type('java.util.List')) . 取而代之的java.util.Arrays.asList ,使用Java.to(jsArray, Java.type('java.util.List')) The resulting list will be backed by the JS array, so changes to one will be reflected by the other. 结果列表将由JS数组支持,因此对一个列表的更改将由另一个列表反映。 You can also convert the JS array to a Java array with just Java.to(jsArray) (which is equivalent to Java.to(jsArray, Java.type('java.lang.Object[]') . So if you want to go through the array conversion step, you can use java.util.Arrays.asList(Java.to(jsArray)); . 您还可以仅使用Java.to(jsArray) (相当于Java.to(jsArray, Java.type('java.lang.Object[]')将JS数组转换为Java数组。经过数组转换步骤,可以使用java.util.Arrays.asList(Java.to(jsArray));

In general, Nashorn will convert JS arrays to Java arrays automatically in most cases where the Java method signature specifies an array parameter, so you don't have to use Java.to() explicitly a lot. 通常,在Java方法签名指定了数组参数的大多数情况下,Nashorn会自动将JS数组转换为Java数组,因此您不必显式使用Java.to() Arrays.asList(T...) is unfortunately a vararg method, so there's some ambiguity as to how to handle the argument. 不幸的是, Arrays.asList(T...)是一个vararg方法,因此在如何处理参数方面存在一些歧义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.ClassCastException: 不能转换为 java.lang.Comparable - java.lang.ClassCastException: cannot be cast to java.lang.Comparable java.lang.ClassCastException:java.util.HashMap无法强制转换为java.lang.Comparable - java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.Comparable java.lang.ClassCastException:class java.util.TreeMap 无法转换为 class java.lang.Comparable - java.lang.ClassCastException: class java.util.TreeMap cannot be cast to class java.lang.Comparable 列表到TreeSet的转换产生:“ java.lang.ClassCastException:MyClass无法转换为java.lang.Comparable” - List to TreeSet conversion produces: “java.lang.ClassCastException: MyClass cannot be cast to java.lang.Comparable” MyClass无法强制转换为java.lang.Comparable:java.lang.ClassCastException - MyClass cannot be cast to java.lang.Comparable: java.lang.ClassCastException 'java.lang.ClassCastException:资源无法强制转换为java.lang.Comparable' - 'java.lang.ClassCastException: Resource cannot be cast to java.lang.Comparable' 线程“主”java.lang.ClassCastException 中的异常:setcollection.Enseignant 无法转换为 java.lang.Comparable - Exception in thread “main” java.lang.ClassCastException: setcollection.Enseignant cannot be cast to java.lang.Comparable java.lang.ClassCastException:com.MyComp.model.Image无法转换为java.lang.Comparable - java.lang.ClassCastException: com.MyComp.model.Image cannot be cast to java.lang.Comparable 线程“主”java.lang.ClassCastException 中的异常:proj.Car 无法转换为 java.lang.Comparable - Exception in thread "main" java.lang.ClassCastException: proj.Car cannot be cast to java.lang.Comparable java.lang.ClassCastException:尝试排序List时,java.util.LinkedHashMap无法转换为java.lang.Comparable异常 - java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.Comparable exception when trying sort a List
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM