1

有可能完全弄清楚吗?

运行时信息应该可用;否则,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

提前致谢。

4

3 回答 3

2

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

于 2013-11-07T11:04:01.060 回答
1

您可以在泛型中引用Object并在运行时使用调试器对其进行检查。

于 2013-11-07T07:39:52.190 回答
0

如果它是出于调试目的,那么在调试器中检查对象(如另一个答案中所述)是好的。

但是,如果您需要在运行时检查一个对象在转换之前是否属于给定类型,您可以使用instanceof运算符:

Object object = m_unMarshaller.unmarshal(new File(xmlName));
Model model;
if(object instanceof Model) {
    model = (Model) object;
}
于 2013-11-07T08:02:52.047 回答