我正在做一个需要加载 XML 文件的小项目。我在这里找到了一个很好的代码示例,它扩展了 DefaultHandler 并使用自定义 TreeRender 将 XML 格式化为树视图。代码编译并运行(总是一个加号)并为我提供了我正在寻找的起点,但代码中有一点我不明白。
这是我没有得到的代码片段:
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 “变量”,使第一条语句无用。但是,如果我取出第一条语句,代码将不再正常工作。事实上,如果我删除任何一个声明,它就不再正常工作。要将元素添加到树中,这两个语句都是必需的。
你能解释一下这里发生了什么吗?我只是不明白。
提前致谢,
史蒂夫