This can probably be cleaned up a lot. Among other things, it shows a nearly constant need to protect the "raw" Java values from ABCL's interpretation to do anything useful. For example
(let ((c (jclass "java.io.File"))) (jnew-array-from-array "java.lang.Class" #(c c c)))
fails to construct an array as the java.lang.Class members are promoted to JAVA-OBJECT. Does this mean we need JNEW-ARRAY-FROM-ARRAY-RAW? Or do we need to try both interpretations?
Onwards through callbacks in CFFI…
[1]: http://trac.common-lisp.net/armedbear/changeset/13089