From: <as...@pr...> - 2004-01-01 03:09:38
|
On Wed, 31 Dec 2003, Peter Graves wrote: > Now I'm really confused. Sorry for being unclear! Here's the plan in more detail: JavaClassLoader has a public loadClassFromByteArray(String,byte[]) method, and Java has a public static JavaClassLoader field, say jcl. Now when the class generator has finished filling a byte array, it calls Java.jcl.loadClassFromByteArray with it and the classname. And when JCLASS & friends need to find a class, they call a wrapper around Class.forName, which does something like try { Class.forName(classname); } catch (ClassNotFoundException e) { try { Class.forName(classname, true, jcl); } catch (ClassNotFoundException cnf) { signal(new LispError("class not found: " + cnf.getMessage())); } } > > Even if you keep the class loader around in a static variable, don't > you still have to pass the byte array to defineClass()? Where is JCLASS > going to get the byte array? In this scenario, the class generator passes the byte array to jcl.loadClassFromByteArray() (which in turn calls defineClass() with it), and JCLASS doesn't need it. > > I was going on the assumption that you were planning to add an optional > or keyword argument to JCLASS so its caller (the application) could > pass in the byte array. No, it's the class generator that passes the byte array, and not to JCLASS, but to jcl.loadClassFromByteArray(). (Actually, I'd rather not carry that byte array around.) What the application passes is the description (in Lisp) of the class, and it passes it to the class generator. An optional or keyword argument wouldn't be very practical, because there are quite a few functions in the JAVA package, which do Class.forName implicitly, so they all would have to accept this optional argument. What do you think? Andras ps. I wish you and every reader of this list a very happy 2004! |