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
通过调查问题,我发现 JavacTrees
是 DocTrees
的 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
的提示。我使用调试器检查了 JavacTrees
和 Trees
的 class 加载器,结果如下:
com.sun.tools.javac.api.JavacTrees
由 java.net.FactoryURLClassLoader
加载
com.sun.source.util.Trees
由 org.codehaus.plexus.classworlds.realm.ClassRealm
加载
因此,2 class 是由不同的 ClassLoader
加载的。因此它将无法从 JavacTrees
转换为 Trees
,即使 Trees
是 JavacTrees
.
的父级 class
我遇到了与 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
通过调查问题,我发现 JavacTrees
是 DocTrees
的 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
的提示。我使用调试器检查了 JavacTrees
和 Trees
的 class 加载器,结果如下:
com.sun.tools.javac.api.JavacTrees
由java.net.FactoryURLClassLoader
加载
com.sun.source.util.Trees
由org.codehaus.plexus.classworlds.realm.ClassRealm
加载
因此,2 class 是由不同的 ClassLoader
加载的。因此它将无法从 JavacTrees
转换为 Trees
,即使 Trees
是 JavacTrees
.