Posted on 2005-11-19 10:59
canonical 閱讀(350)
評論(0) 編輯 收藏 所屬分類:
Witrix開發(fā)平臺
java中最常用的數(shù)據(jù)結(jié)構(gòu)類型是Map和List,
它們也是Container的兩種基本模式,一個(gè)是根據(jù)特征值定位,一個(gè)是根據(jù)地址定位。
它們共同的一個(gè)特征是表達(dá)了數(shù)據(jù)之間的直接的,短程的一種相關(guān)性。另一種常見的數(shù)據(jù)結(jié)構(gòu)Tree則表達(dá)了數(shù)據(jù)之間的一種長程的關(guān)聯(lián):根節(jié)點(diǎn)與其所有層次上
的子節(jié)點(diǎn)之間都存在著關(guān)聯(lián)。 文件系統(tǒng),組織機(jī)構(gòu), XML文檔等都可以對應(yīng)為Tree數(shù)據(jù)結(jié)構(gòu)。在描述樹形結(jié)構(gòu)的時(shí)候,我們經(jīng)常使用XML文件,
但是XML文件在程序中操縱起來并不方便,這其中的一個(gè)重要原因是XML是面向文檔的,即操縱XML的API返回的和使用的都只能是文本字符串,而不能直
接使用程序中常見的其他數(shù)據(jù)結(jié)構(gòu)。在witrix平臺中操縱Tree結(jié)構(gòu)的標(biāo)準(zhǔn)接口是TreeNode類,它的設(shè)計(jì)是面向應(yīng)用的,即節(jié)點(diǎn)的屬性值為
Object類型而不是String類型。
Tree由三部分組成: 屬性,值, 子節(jié)點(diǎn)
class TreeNode implements IVariant{
List getChildren();
int getChildCount();
TreeNode child(int index);
/** 當(dāng)name對應(yīng)的節(jié)點(diǎn)不存在時(shí)將會自動創(chuàng)建該節(jié)點(diǎn) */
TreeNode child(String name);
/** 當(dāng)name對應(yīng)的節(jié)點(diǎn)不存在時(shí)返回null */
TreeNode existingChild(String name);
Map getAttributes();
IVariant attribute(String name);
void setAttribute(String name, Object attrValue);
}
TreeNode.attribute(name)返回的是IVariant接口,例如
boolean defaultValue = true;
boolean b = node.child("subA").attribute("attrB").booleanValue(defaultValue);
TreeNode本身也是IVariant接口的一個(gè)實(shí)現(xiàn),例如
int i = ode.intValue();
通過使用IVariant接口,我們實(shí)現(xiàn)了強(qiáng)類型的java語言與弱類型的xml文本之間的自然轉(zhuǎn)換,在轉(zhuǎn)換過程中還可以指定缺省值,這些都極大的簡化了實(shí)際應(yīng)用時(shí)的編碼量。