为什么需要我验证节点是否是元素的实例



我制作了一个简单的XML文件,并尝试打印子节点。我已经设法做到了,但只有当我首先验证我的节点是Element的实例时,它才有效。我认为元素是节点的实例。

我在下面的代码中所做的只是从名为nameList的NodeList中获取每个项,并将其转换为一个元素,这样我就可以将它们打印到标准输出中。如果我不检查person是否是Element的实例,为什么会得到异常(java.lang.ClassCastException(?

提前感谢!

// Get the child nodes tag names from the root element
System.out.println("These are the names in child nodes: ");
NodeList nameList = element.getChildNodes();
for(int i = 0; i < nameList.getLength(); i++) {
Node person = nameList.item(i);
if (person instanceof Element){
Element name = (Element)person;
System.out.println(name);
}
}

根据JavaDocs,Element扩展了Node是正确的,但它不是node的唯一子类

这本质上意味着在NodeList中可能存在另一个扩展Node的对象,该对象不是Element,即w3c.Notation.

尝试将任何不是Element或其子类的类强制转换为Element将导致ClassCastException。

最新更新