javascript - java.lang.ClassCastException: jdk.nashorn.internal.objects.NativeArray cannot be cast to java.lang.Comparable -
while running javascript nashorn
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 cast java.lang.comparable @ java.util.collections.sort(collections.java:170) so way use java collections in javascript?
update:
thanks attila, not both js , jjs script produce same output
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 create array single element being js array. js arrays aren't java arrays...
instead of java.util.arrays.aslist, use java.to(jsarray, java.type('java.util.list')). resulting list backed js array, changes 1 reflected other. can convert js array java array java.to(jsarray) (which equivalent java.to(jsarray, java.type('java.lang.object[]'). if want go through array conversion step, can use java.util.arrays.aslist(java.to(jsarray));.
in general, nashorn convert js arrays java arrays automatically in cases java method signature specifies array parameter, don't have use java.to() explicitly lot. arrays.aslist(t...) unfortunately vararg method, there's ambiguity how handle argument.
Comments
Post a Comment