我正在开发一个需要加载 XML 文件的小项目。我发现了一个很好的代码示例,它扩展了 DefaultHandler 并使用自定义 TreeRender 将 XML 格式化为 TreeView here 。代码编译并运行(总是一个优点)并为我提供了我正在寻找的起点,但代码中有一点我不明白。
这是我没有得到的代码片段:
public class XmlTreeView extends DefaultHandler {
private DefaultMutableTreeNode _base;
<snip>
@Override
public void startElement(String uri, String localName, String tagName, Attributes attr) throws SAXException {
System.out.println("startElement: uri=" + uri + " localname=" + localName + " tagName=" + tagName );
DefaultMutableTreeNode current = new DefaultMutableTreeNode(tagName);
_base.add(current);
_base = current;
for (int i = 0; i < attr.getLength(); i++) {
// <snip> attribute processing
}
}
该类声明了一个名为 _base 的 DefaultMutableTreeNode。 startElement() 方法实例化一个名为 current 的新 DefaultMutableTreeNode,然后执行
_base.add(current);
_base = current;
我所有的编程知识告诉我,第二条语句将新对象(当前)分配给 _base“变量”,使得第一条语句毫无用处。但是,如果我删除第一条语句,代码将不再正常工作。事实上,如果我删除任何一条语句,它就不再正常工作。要将元素添加到树中,这两个语句都是必需的。
你能向我解释一下这里发生了什么吗?我就是不明白。
提前致谢,
史蒂夫
最佳答案
_base
是对对象的引用。当您说_base.add(current)
时,您正在调用一个对该对象进行一些更改的方法。然后,当您说 _base = current;
时,_base
将成为对不同对象的引用。但第一个物体仍然存在。如果在其他地方有对它的引用,那么您对其所做的任何更改仍然会影响程序的其余部分。
关于java - 你能帮我理解这段Java代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604045/