从javax.swing.text尝试针对AbstractDocument.UndoRedoDocumentEvent的instanceof时出现IllegalAccessError

javax.swing.text.DefaultCaret.Handler.insertUpdate(DocumentEvent)的源代码中,我找到了以下行(从第1685行开始):

if (e instanceof AbstractDocument.UndoRedodocumentEvent) {
    setDot(offset + length);
    return;
}

但是,当我尝试这个:

package javax.swing.text;

public class Foo {
    public static void main(String[] args) {
        Object o = new Object();
        if (o instanceof AbstractDocument.UndoRedodocumentEvent) {
            System.out.println("yay");
        } else {
            System.out.println("aww");
        }
    }
}

它会给:

Exception in thread "main" java.lang.IllegalAccessError: tried to access class javax.swing.text.AbstractDocument$UndoRedodocumentEvent from class javax.swing.text.Foo
    at javax.swing.text.Foo.main(Foo.java:6)

为什么我不能对该类进行实例化,但DefaultCaret.Handler可以吗?

使用java版本1.6.0_20

$java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1~10.04.1)
OpenJDK Client VM (build 19.0-b09,mixed mode,sharing)

更新:

根据答案我尝试了以下内容

文件Foo.java:

package javax.swing.text;

public class Foo {
    public static void main(String[] args) {
        Object o = new Object();
        if (o instanceof Outer.Inner) {
            System.out.println("yay");
        } else {
            System.out.println("aww");
        }
    }
}

文件Outer.java:

package javax.swing.text;

public class Outer {
    class Inner {
    }
}

这很好,并按预期打印“aww”.

请注意,这两个文件都在包javax.swing.text中.另请注意,Foo.java已经在我原始问题的javax.swing.text包中.

据我所知,包装没有“密封”. rt.jar的MANIFEST(包含javax.swing.text包的那个)不包含“Sealed”.命令Package.getPackage(“javax.swing.text”).isSealed()返回false.

所以我可以反对我自己的内部类,但不能反对AbstractDocument.UndoRedodocumentEvent,即使包中的其他类可以.

任何想法为什么会这样?

最佳答案
看起来UndoRedodocument是受包保护的,而DefaultCaret.Handler和UndoRedodocument在同一个包中(如果我没记错的话,javax.swing.text).

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...