我有一个我无法更改的课程,如下所示:
public class Foo {
public final int ID=0;
public int bar;
public final Object baz=null;
}
我想要一个匿名的内部类来覆盖Foo
,例如:
public Foo newFoo(final int mID, final int mbar, final Object mbaz) {
return new Foo(){
public final int ID = mID;
public int bar = mbar;
public final Object baz = mbaz;
};
}
然后我有一个javax.script.ScriptEngine
我想在 JS 中调用这样的东西:newFoo(0,0,undefined)["ID"]
我的问题是我得到这样的异常:
sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.lang.IllegalAccessException: Class sun.org.mozilla.javascript.internal.JavaMembers can not access a member of class Baz$1 with modifiers "public final" (mod.js#9) in test.js at line number 9
我不明白我怎么会在这里遇到问题:如果newFoo
返回一个普通的 'ol Foo
,这工作得很好,但是如果我尝试Foo
用匿名内部类覆盖,我无法访问任何被覆盖的成员,即使他们是上市。