Forcing elements of List to be converted as java.lang.Long

Attila Szegedi attila.szegedi at oracle.com
Thu Nov 27 11:24:32 UTC 2014


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 <timvolpe at 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 <timvolpe at 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.
> 



More information about the nashorn-dev mailing list