Thinking of it, yes, there is: var asList = java.util.Arrays.asList; var LongType = Java.type("java.lang.Long[]");
then: asList(Java.to(arr, LongType)) Attila. On Nov 27, 2014, at 12:37 AM, Tim Fox <timvo...@gmail.com> wrote: > Hi Attila, > > I understand the generic type info is erased, but my question was whether > there is any way I can "force" Nashorn to convert the elements as Long rather > than Integer when doing the conversion, e.g. using some special Nashorn > specific syntax, e.g. > > var arr = [123]; > arr.forceConversionAsLong = true; // A contrived example but you get the > point :) > obj.foo(arr); > > (or whatever) > > > On 26/11/14 21:50, Attila Szegedi wrote: >> I don't think so. As the types are erased at run time all we see is a method >> with signature foo(List list). I think if you tried to add two methods to a >> class: >> >> public void foo(List<Long> x) { } >> public void foo(List<Integer> x) { } >> >> then javac would refuse to compile it saying that both have the same erasure. >> >> Attila. >> >> On Nov 26, 2014, at 10:45 PM, Tim Fox <timvo...@gmail.com> wrote: >> >>> Hello folks, >>> >>> I have a Java method: >>> >>> public void foo(List<Long> list) { >>> System.out.println("elem0 is " + list.get(0)); >>> } >>> >>> Which I call from JS with a JS array: >>> >>> obj.foo([123]); >>> >>> This results in a ClassCastException as Nashorn converts the JS Array into >>> a java.util.List instance which contains a java.lang.Integer element (not >>> java.lang.Long) >>> >>> Is there any way to force Nashorn to convert the array elements as Longs >>> not Integers? >>> >>> Thanks. >