CL-USER> (#"getMultiDimensional" 'Array) #(#<jarray [I@2b8edf4d {30E64E92}> #<jarray [I@60306c52 {B17ACD4}> #<jarray [I@3f5397fc {91F41DF}> #<jarray [I@631d9c26 {2CF6B5A0}>) CL-USER> (#0"getMultiDimensional" 'Array) #<jarray [[I@4068f9fc {2BF4306D}>
or (jstatic-raw "getMultiDimensional" (find-java-class "Array")) #<jarray [[I@56810247 {2FBCAFAF}>
So try using #0"..." if you are using jss or jcall-raw if not.
-Alan
On Thu, Feb 6, 2014 at 9:47 AM, Mark Evenson evenson@panix.com wrote:
On Feb 6, 2014, at 2:52, Cyrus Harmon ch-lisp@bobobeach.com wrote:
I am trying to connect ABCL up with some java code that uses
multidimensional arrays of the form:
int[][] theArray = new int[4][4];
The problem is that when I call this code I get something like this in
return:
#(#<jarray [I@2d983837 {6492BA43}> #<jarray [I@5d02b84a{5D9131FA}> #<jarray [I@67684413{6E4D706E}> #<jarray [I@1e107e55{4CD60DDE}>)
that is a lisp array that contains 4 java arrays. I can’t pass this off
to a method like this:
static public int[][] arrayTest2(int[][] oldArray) { … }
I can work around this by creating a new java array myself (and
populating it appropriately), but this is no fun. Is this the intended behavior?
Regardless of whether this behavior was intended—for which I can find no evidence—it certainly seems wrong given that for the Java class:
public class Array { public static int[][] getMultiDimensional() { return new int[4][4]; }
public static int[][] returnRef(int[][] ref) { return ref; } }
Compiled with javac, (java:add-to-classpath “~/directory/“), then the following
CL-USER> (java:jnew-array "int" 4 4) #<jarray [[I@2e9e32cc {141906FD}> CL-USER> (jstatic "returnRef" "Array" *) #(#<jarray [I@4147aa25 {47F3849E}> #<jarray [I@4487c5f9 {2DD68195}> #<jarray [I@5dd574b5 {68E14733}> #<jarray [I@1e099b10 {8A346D8}>)
shows that we are clearly getting a different sort of Lisp object than we pass into the Java FFI for what should be a symmetric reflection.
Filed as [ticket-347][].
-- "A screaming comes across the sky. It has happened before but there is nothing to compare to it now."