Bug report: JavaScript arrays are not coerced into Java arrays when calling Java functions that expect arrays

Jim Laskey (Oracle) james.laskey at oracle.com
Tue Oct 8 06:04:25 PDT 2013


You could always create your own Dynalink linker plug in to do the wrappers you need.  Sundar will follow up.

On 2013-10-08, at 2:45 PM, Rick Bullotta <rick.bullotta at thingworx.com> wrote:

> This is actually a great reason to support custom wrap factories/adapters, so that application specific type conversion and name resolution can be done without burdening the script developer of this type of syntax, which, to be honest, would be a bit intimidating.  I certainly wouldn't want to ask someone used to writing general purpose JavaScript to have to understand which objects were Java objects and which objects were JS objects.  The power can be in the abstraction.  I think a focus on a clean syntax is essential if we want Nashorn to empower higher level developers to use scripting (which we have been able to readily achieve with Rhino).  
> 
> Just my $0.02, before taxes.
> 
> -----Original Message-----
> From: nashorn-dev-bounces at openjdk.java.net [mailto:nashorn-dev-bounces at openjdk.java.net] On Behalf Of Jim Laskey (Oracle)
> Sent: Tuesday, October 08, 2013 8:24 AM
> To: Tal Liron
> Cc: nashorn-dev at openjdk.java.net
> Subject: Re: Bug report: JavaScript arrays are not coerced into Java arrays when calling Java functions that expect arrays
> 
> Nashorn does not coerce JS arrays implicitly.  There were too many ambiguous cases to do a complete implementation (nested conversions.)  In Nashorn you have to;
> 
> myInstance.myMethod(Java.to(['a', 'b', 'c'], "java.lang.String[]"));
> 
> or;
> 
> var StringArray = Java.type("java.lang.String[]"); function args(array) {
> 	return Java.to(array, StringArray);
> }
> 
> myInstance.myMethod(args(['a', 'b', 'c']));
> 
> Cheers,
> 
> -- Jim
> 
> 
> On 2013-10-08, at 1:54 PM, Tal Liron <tal.liron at threecrickets.com> wrote:
> 
>> Lets say we have a Java class with this method:
>> 
>> class MyClass {
>> void myMethod(String[] arguments) {}
>> }
>> 
>> And in Nashorn we call it like so:
>> 
>> myInstance.myMethod(['a', 'b', 'c'])
>> 
>> The JavaScript array seems to be converted into a string (as "a,b,c"), and then wrapped in a Java string array as its single element before sending to Java.
>> 
>> In Rhino, the above works as expected.
> 



More information about the nashorn-dev mailing list