I'm trying to subclass an inner class (defined in Java) in Rhino, and I can't seem to make it work.
I've got some compiled Java code (which I essentially can't change) that has an inner abstract class:
package mypackage;
class MyClass {
abstract static class MyInnerClass {
abstract void print(String s);
}
}
From Rhino, I can see it just fine:
js> Packages.mypackage.MyClass.MyInnerClass
[JavaClass mypackage.MyClass$MyInnerClass]
But I can't figure out how to subclass it. I figured something like this would work, since I do it for non-inner classes:
var a = new JavaAdapter(Packages.mypackage.MyClass.MyInnerClass, {
print: function(s) { print("s=" + s); },
});
Not only does it not work, Rhino itself quits, and gives me quite the stack trace:
Exception in thread "main" java.lang.IllegalAccessError: class adapter1 cannot access its superclass mypackage.MyClass$MyInnerClass
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:676)
at org.mozilla.javascript.DefiningClassLoader.defineClass(DefiningClassLoader.java:62)
...
Am I doing it wrong? Any ideas?
EDIT: Oh, I just realized that MyClass isn't declared "public". Could that be it?