Great, that works.

And it's a lot faster than manually converting the elements of the list in JS before sending it to Java :)

On 27/11/14 11:24, Attila Szegedi wrote:
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.

Reply via email to