[英]Java creating histogram method can someone help me to understand this code?
[英]Can you help me understand this Java code?
我正在做一個需要加載XML文件的小型項目。 我發現,擴展了DefaultHandler並使用自定義TreeRender到XML格式化為一個TreeView一個很好的示例代碼在這里 。 該代碼可以編譯並運行(總是有加號),並為我提供了我要尋找的起點,但是有一點我不理解。
這是我沒有得到的代碼片段:
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
成為對另一個對象的引用。 但是第一個對象仍然在那里。 如果您在其他地方引用了它,則對它所做的任何更改仍然會影響程序的其余部分。
這些變量的命名不正確,這導致了大多數混亂。
字段_base
應該被稱為currentNode
,而在startElement
創建的新Node應該被稱為childNode
。
這是相同的代碼,但使用這些新的變量名稱重寫:
currentNode.add(childNode);
currentNode= childNode;
因此,您看到在XML文件中輸入start元素時,我們將創建一個新節點,並將其添加到XML樹結構的Object表示形式中。 我們剛剛開始的新子元素作為子元素添加到當前節點。 然后,我們更改對當前節點的引用以指向該新的子節點。 這使新的子節點成為當前節點。
我假設在代碼中未顯示,但有一個endElement
,我們在其中進行反向操作並將樹上移到currentNode的父級。
我腦海中有一段奇怪的代碼,但這就是發生的情況:
private DefaultMutableTreeNode _base;
充當該類的全局currentNode
。 當您調用startElement
您正在執行以下操作:
DefaultMutableTreeNode current = new DefaultMutableTreeNode(tagName);
//Create a new TreeNode item based off the tagName
因此,您現在擁有:
現在,您將添加到_base
的子節點中,該節點是新創建的節點
_base.add(current);
現在,您已經完成了:
最后
_base = current;
現在你有
現在,對_base
的引用指向新創建的子級。 調用endElement
,您將退出_base
並返回到舊的_base
_base
存儲您當前正在使用的xmlElement。 當你打電話startElement
到所有通話setAttribute
或startElement
將基於關閉此。
摘要:
這是在代碼中播放的樣子:
XmlWriter xWriter;
xWriter.startElement("NPC"); //_base becomes new node "hello"
xWriter.startAttribute("Greeting", "Hi"); //attribute is now set to _base (or greeting)
xWriter.startElement("Data"); //_base becomes new node "data"
xWriter.startAttribute("Height", "200"); //attribute is now set to _base (or data)
xWriter.endElement(); //on end element you move to parent of data, so greeting
xWriter.endElement(); //again you move to the parent
創建:
<NPC Greeting='Hi'>
<Data Height='200'/>
</NPC>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.