提问人:Foxler2010 提问时间:7/22/2022 最后编辑:Foxler2010 更新时间:7/23/2022 访问量:68
将 NodeList 强制转换为 Element 时出现 NullPointerException
NullPointerException when casting NodeList to Element
问:
我的 DOM 相关代码遇到了一些奇怪的问题。在这里:
public Item getItem(String id) throws ConstructorNotDefinedException {
//Find the specific item Element we are working with
Element item = null;
for (int i = 0; i < this.items.getLength(); i++) { //items is a NodeList of all items, derived from the document Element
Element currentItem = (Element) this.items.item(i);
if (currentItem.getAttribute("id") == id) { //only runs once since every ID is unique
item = currentItem;
}
}
//The line with the error
Element typeElement = (Element) item.getElementsByTagName("type").item(0);
//more code using typeElement...
下面是运行代码的主类:
public class test {
public static void main(String[] args) throws ConstructorNotDefinedException {
ItemDataReader reader = ItemDataReader.newInstance(Paths.get(System.getProperty("user.home"), "Documents", "path", "to", "xml", "document.xml"));
Item testItem = reader.getItem("dog");
}
}
第一部分似乎工作正常,完全没有错误,但是一旦我尝试获取typeElement,它就会抛出NullPointerException。该行中调用的方法都没有抛出异常,所以我不知道它来自哪里。
下面是我使用的 XML 文档的示例:
<item id="dog">
<type>1</type>
<name>Dog</name>
<strength>10</strength>
</item>
<item id="cat">
<type>1</type>
<name>Cat</name>
<strength>10</strength>
</item>
我尝试过很多东西,但我不知道发生了什么。非常感谢帮助!
编辑:
我尝试了 Benjamin W. 的建议,使用似乎已经解决了这个问题。我仍然不太确定为什么使用不起作用。.equals()
==
答:
0赞
Foxler2010
7/23/2022
#1
在研究了差异之后,似乎使用使代码比较了字符串的内容,而不是像那样比较引用。由于引用总是不同的,因此每次都返回 false,然后尝试从 null 对象中获取一些信息。.equals()
==
评论
item
.equals()
==
id