发生java.lang.ClassCastException时如何计算实际的类?

时间:2013-11-07 07:32:47

标签: java jaxb

有可能搞清楚吗?

运行时信息应该可用;否则,Java应该无法检测到问题。

这里是片段:


        m_jaxbCxt = JAXBContext.newInstance("generated");
        m_unMarshaller = m_jaxbCxt.createUnmarshaller();
        Model model = (Model)m_unMarshaller.unmarshal(new File(xmlName));

例外:


Exception in thread "main" java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to generated.Model

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以对JAXBIntrospector.getValue(Object)操作的结果调用unmarshal。如果有JAXBElement,这将打开{{1}}。

答案 1 :(得分:1)

您可以在通用Object中使用该引用,并在运行时使用调试器进行检查。

答案 2 :(得分:0)

如果是出于调试目的,那么检查debbugger中的Object,就像在另一个答案中所说的那样,是好的。

但是,如果您需要在运行时检查对象是否具有给定类型,然后再使用instanceof运算符:

Object object = m_unMarshaller.unmarshal(new File(xmlName));
Model model;
if(object instanceof Model) {
    model = (Model) object;
}