object 什么时候无法转换为 Java 中的 parent class?

When will an object fail to cast to its parent class in Java?

我遇到了与 ClassCastException in ant schemagen task using jaxb-ri-2.2.7 相同的问题。但是,我最大的问题不是问题本身,而是错误日志中的异常:

java.lang.ClassCastException: com.sun.tools.javac.api.JavacTrees cannot be cast to com.sun.source.util.Trees

通过调查问题,我发现 JavacTreesDocTrees 的 child class,而 DocTrees 是 child class 个 Trees。具体来说,class 定义是:

public class JavacTrees extends DocTrees {
    // ...
}

public abstract class DocTrees extends Trees {
    // ...
}

public abstract class Trees {
    // ...
}

上面的ClassCastException基本上意味着一个object未能投进它的parentclass。我不记得在我读过的任何教科书中有这样的内容。

谁能给我解释一下这个异常?谢谢。

感谢@OHGODSPIDERS 提供有关 ClassLoader 的提示。我使用调试器检查了 JavacTreesTrees 的 class 加载器,结果如下:

因此,2 class 是由不同的 ClassLoader 加载的。因此它将无法从 JavacTrees 转换为 Trees,即使 TreesJavacTrees.

的父级 class