Ich versuche, eine innere Klasse (definiert in Java) in Rhino Unterklasse, und ich kann nicht scheinen, damit es funktioniert.Wie unterklassiere ich eine innere (statische) Klasse in Rhino?
ich einige kompilierten Java-Code haben (was ich kann im Wesentlichen nicht ändern), die eine innere abstrakte Klasse hat:
package mypackage;
class MyClass {
abstract static class MyInnerClass {
abstract void print(String s);
}
}
Von Rhino, kann ich es sehen ganz gut:
js> Packages.mypackage.MyClass.MyInnerClass
[JavaClass mypackage.MyClass$MyInnerClass]
Aber ich kann nicht herausfinden, wie man es unterklassifiziert. Ich dachte, so etwas wie dies funktionieren würde, da ich es für nicht-innere Klassen zu tun:
var a = new JavaAdapter(Packages.mypackage.MyClass.MyInnerClass, {
print: function(s) { print("s=" + s); },
});
Nicht nur, dass es nicht funktioniert, Rhino selbst beendet wird, und gibt mir die ganz 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)
...
Mache ich es falsch? Irgendwelche Ideen?
EDIT: Oh, ich habe gerade festgestellt, dass MyClass nicht "öffentlich" erklärt wird. Könnte es das sein?
Nun, machen Sie es öffentlich und kommen Sie zurück zu uns :-) – Pointy
Wahrscheinlich ja, je nachdem, wo Sie versuchen, Unterklasse, müssen Sie es öffentlich machen. – fmucar