【发布时间】:2011-01-01 11:20:25
【问题描述】:
我正在尝试在 Rhino 中对内部类(用 Java 定义)进行子类化,但我似乎无法使其工作。
我有一些已编译的 Java 代码(我基本上无法更改),它们有一个内部抽象类:
package mypackage;
class MyClass {
abstract static class MyInnerClass {
abstract void print(String s);
}
}
从Rhino,我可以看得很清楚:
js> Packages.mypackage.MyClass.MyInnerClass
[JavaClass mypackage.MyClass$MyInnerClass]
但我不知道如何子类化它。我认为这样的事情会起作用,因为我是为非内部类做的:
var a = new JavaAdapter(Packages.mypackage.MyClass.MyInnerClass, {
print: function(s) { print("s=" + s); },
});
它不仅不起作用,Rhino 本身也退出了,并给了我相当多的堆栈跟踪:
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)
...
我做错了吗?有什么想法吗?
编辑:哦,我刚刚意识到 MyClass 没有被声明为“公共”。会这样吗?
【问题讨论】:
-
好吧,把它公开并回复我们:-)
-
可能是的,取决于您尝试子类化的位置,您需要将其公开。
标签: java javascript subclass rhino inner-classes