On 11/27/2014 12:37 AM, Tim Fox 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)

BTW, generic info like this one are preserved because javac need them to cross compile. so nashorn could inspect the generic signature and if there is one try to do the suitable conversion.

Rémi



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