這篇文章主要介紹“Java的DataObject怎么用”,在日常操作中,相信很多人在Java的DataObject怎么用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java的DataObject怎么用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序設計、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了恩施土家免費建站歡迎大家使用!
數(shù)據(jù)對象用于描述業(yè)務數(shù)據(jù),數(shù)據(jù)對象利用屬性保存數(shù)據(jù)。
數(shù)據(jù)對象接口的設計原則是:使編程更為簡單,因為它提供了對所有普通類型的業(yè)務數(shù)據(jù)的訪問以及各種訪問模式的支持,如基于名字、索引和路徑進行訪問。
數(shù)據(jù)對象接口包含以下方法:
獲取和設置數(shù)據(jù)對象的屬性;
查詢一個屬性是否是集合;
創(chuàng)建一個新的被包含的子數(shù)據(jù)對象實例;
從數(shù)據(jù)對象的容器刪除該數(shù)據(jù)對象;
從數(shù)據(jù)對象的容器分派該數(shù)據(jù)對象;
獲取數(shù)據(jù)對象的容器及其包含的屬性;
獲取根數(shù)據(jù)對象;
獲取數(shù)據(jù)對象所屬的數(shù)據(jù)圖;
獲取數(shù)據(jù)對象的類型;
獲取數(shù)據(jù)對象的順序(如果存在的話);
獲取數(shù)據(jù)對象的額外屬性(如果存在的話);
對于許多不使用生成代碼的應用而言,數(shù)據(jù)對生成象接口是唯一用來編寫應用的SDO部件。對于那些使用生成代碼的應用來說,將直接使用生成的接口。SDO的其它部件主要根據(jù)用戶需要加以使用。
數(shù)據(jù)對象可以分為以下幾類。在分類過程中,開放(open)或順序(sequenced)概念能夠獨自或一起使用。
Basic。數(shù)據(jù)對象和一個每個屬性都有一個賦值域的JavaBean類似。所有允許的屬性集合可以通過getType().getProperties()方法獲得。通過get(property)方法可以訪問屬性的值。屬性內部的順序是可以維護的,但是跨越多個屬性之間的順序是不可維護的。
Open。數(shù)據(jù)對象和一個容許有額外屬性的JavaBean類似。在XML中,這等同于開放(通配符)內容。它類似于一個和新屬性擁有額外映射的JavaBean。額外屬性不是由getType().getProperties()方法返回屬性的一部分。通過使用getInstanceProperties()方法,能夠獲得一個特殊數(shù)據(jù)對象的實際擁有的屬性。屬性值可以使用get(property)方法訪問。屬性內部的順序是可以維護的,但是跨越多個屬性之間的順序是不可維護的。
Sequenced。數(shù)據(jù)對象和一個能夠同時維護屬性內部和屬性之間順序的JavaBean類似。在XML中,這等同于一個DOM。在使用XML時,Sequence表示了數(shù)據(jù)對象內部所有XML元素的順序。使用get(property)方法可以獲得屬性值,但是維護跨越多個屬性之間的順序,則需要通過順序interface. getSequence()方法返回XML實例的所有XML元素的Sequence進行。XML屬性沒有順序的概念并且可以通過get(property)方法進行訪問。
數(shù)據(jù)對象擁有給其屬性所賦的數(shù)據(jù)值。例如,一個采購訂單數(shù)據(jù)對象的orderDate屬性有一個值為:2005-6-30。通過使用數(shù)據(jù)對象的get("orderDate")和 set("orderDate")方法,可以獲取或修改其orderDate屬性的值。當使用生成的代碼時,也可以通過使用PurchaseOder接口上的getOrderDate()和setOrderDate()方法訪問屬性的值。
在數(shù)據(jù)對象接口上,可以基于屬性的名字通過使用get(String path)方法訪問屬性值,也可以利用屬性的索引或者直接利用屬性對象訪問屬性值。數(shù)據(jù)對象的get(String path)方法可以使用別名,也可以使用路徑里的屬性名。在這里,路徑可能僅僅是一個屬性的名字,也有可能是一個基于XPath子集的路徑表達。
有時屬性的類型會和應用程序中習慣使用的類型不同。例如,當在用戶界面中顯示一個整型數(shù)量時,字符串型可能比整型表達更有效??梢苑奖愕脑L問整型數(shù)量屬性的getString(“quantity”)方法將會返回一個字符串類型的值。在許多應用中,這使一個常用的任務得以簡化。
在調用一個數(shù)據(jù)對象的類型訪問器(accessor)get
Java基本類型;
Java基本類型的對象包裝;
String;
Date和時間類型;
URI;
Byte[];
BigDecimal;
BigInteger;
Java和DataHelper描述了類型轉換。本規(guī)范145頁“DataType Conversions”中說明了所支持的類型轉換。
屬性可能有一個或多個值。如果一個屬性是多值的,那么property.many返回true,get(property)方法將返回一個列表(List)。
在數(shù)據(jù)接口或自動生成的代碼上,當屬性沒有值時,返回值為List的數(shù)據(jù)對象方法將返回一個空列表而不是返回一個null。返回的列表可以描述數(shù)據(jù)對象的值的任何變化。
對于訪問多值屬性來說,getList(property)訪問器是極其方便的。如果property.many是true,那么set(property, value)和setList(property, value)方法需要“value”分別為java.util.Collection和List對象。這些方法和在使用完getList(property).clear()之后緊接著使用getList(property).addAll(value)方法效果一樣。
對于多值屬性,get()和getList()方法將返回一個包含當前值的列表List。通過List接口立即可以對數(shù)據(jù)對象的當前值進行更新操作。每次使用get()或getList()方法訪問時,都將返回同一個List對象。
對于一個多值屬性,isSet(property)方法將返回:
True,如果List不為空;
False,如果List為空;
對于一個單值屬性,isSet(property)方法將返回:
False,如果Property還沒有被set()或者已經(jīng)被 unset()了;
True,如果當前值不是Property的缺省值;
對于某些實例,實現(xiàn)基于下列策略決定isSet(property)的值:
調用set()之后而沒有調用unset(),isSet()返回True。在set(property, property.getDefault())之后,isSet(property)返回True;
當前值不等于缺省值時,isSet()返回true;在set(property, property.getDefault())之后,isSet(property)返回false。
unset(property)訪問器可以用來清空一個簡單屬性,因此在unset(property)之后,isSet(property)返回false,get(property)返回缺省值。delete()方法將取消數(shù)據(jù)對象的所有屬性的值,除非該屬性為只讀屬性。在unset()之后,get(property)將返回缺省值,對于多值屬性,則返回一個空列表。
注意:試圖使用set,unset或者delete修改一個只讀屬性將會引發(fā)一個異常。
數(shù)據(jù)圖內的數(shù)據(jù)對象被組織成一個樹型結構。有一個數(shù)據(jù)對象作為樹的根節(jié)點,而其它數(shù)據(jù)對象則組成這個樹的其它葉子節(jié)點。
通過使用由根數(shù)據(jù)對象開始的包含內容引用(containment references)就可以創(chuàng)建一個樹型結構。根數(shù)據(jù)對象引用其它數(shù)據(jù)對象,而這些數(shù)據(jù)對象則可以進一步引用更深一層的數(shù)據(jù)對象。除了根數(shù)據(jù)對象,數(shù)據(jù)圖內的每一個數(shù)據(jù)對象必定有一個從樹內其它節(jié)點而來的包含內容引用。圖內的每一個數(shù)據(jù)對象可以跟蹤它的包含內容引用的位置。
對于一個數(shù)據(jù)圖來說,擁有一個非包含內容引用(containment references)是可能的。這些引用所指向的數(shù)據(jù)對象是同一個數(shù)據(jù)圖的一部分(引用的數(shù)據(jù)對象必定是同一個樹的一部分),但是這些引用對該數(shù)據(jù)圖的樹型結構沒有影響。
包含內容和非包含內容都是數(shù)據(jù)對象的屬性。該屬性的類型可以是任何一種數(shù)據(jù)對象類型。
一個特殊的數(shù)據(jù)對象引用屬性是否是一個包含內容引用或非包含內容引用由該數(shù)據(jù)圖的數(shù)據(jù)模型定義,例如定義一個XML文檔數(shù)據(jù)類型的XSD。一旦數(shù)據(jù)模型被定義好后,將不能被修改??梢酝ㄟ^訪問property.containment來查詢一個特殊的引用是否是一個包含內容引用。
容器型數(shù)據(jù)對象包含其它數(shù)據(jù)對象。數(shù)據(jù)對象能夠擁有一個容器數(shù)據(jù)對象的最大數(shù)目。如果一個數(shù)據(jù)對象沒有容器,那么它就是一個根數(shù)據(jù)對象。
getContainer()和getContainmentProperty()方法提供了自上而下的簡單瀏覽數(shù)據(jù)對象所包含的內容的方法。getContainer()方法返回一個父數(shù)據(jù)對象,getContainmentProperty()方法返回包含該對象的容器屬性。使用detach()方法,在不做任何改變的情況下,可以將一個數(shù)據(jù)對象能夠從它的容器中移出。
包含內容可以被管理。當一個數(shù)據(jù)對象作為一個包含內容屬性的值被設置或添加時,它將被從先前的任何一個包含內容屬性中移出。包含內容不可能有循環(huán)。如果設置或添加將生成一個循環(huán),一個異常將會拋出。
創(chuàng)建方法可以創(chuàng)建一個該屬性所屬類型的數(shù)據(jù)對象,或者創(chuàng)建一個在參數(shù)中說明的類型的數(shù)據(jù)對象,并且能夠將一個創(chuàng)建好的數(shù)據(jù)對象添加到指定的屬性。如果數(shù)據(jù)對象的類型是一個順序型(getType().isSequenced()方法返回true),新創(chuàng)建的數(shù)據(jù)對象將被添加在順序的末尾。如果屬性是單值的,屬性的值將被設置為該新創(chuàng)建的對象。如果屬性是多值的,新創(chuàng)建的對象將被作為最后一個對象而添加。只有包含內容屬性能夠被用來創(chuàng)建對象。一個新創(chuàng)建的對象的所有屬性都被取消(未賦值或僅是缺省值)。
delete()方法取消了數(shù)據(jù)對象的所有非只讀屬性。如果包含內容屬性不是只讀的,delete()方法也將把該數(shù)據(jù)對象從包含其的數(shù)據(jù)對象中移出。包含內容屬性所包含的遞歸的子數(shù)據(jù)對象也將被刪除。
如果其它數(shù)據(jù)對象有一個單步的或非包含內容屬性指向已刪除的數(shù)據(jù)對象,那么這些引用將不會被修改。然而為了滿足數(shù)據(jù)圖的封閉特性,上述屬性的值需要改變。一個被刪除的數(shù)據(jù)對象能夠被再次使用,并且能夠被再次添加到數(shù)據(jù)圖中。
數(shù)據(jù)對象可能是順序型的或非順序型的。getType().isSequenced()方法可以告訴你該數(shù)據(jù)對象的類型是否是順序型的。
如果數(shù)據(jù)對象的類型是順序型的,那么getSequence()方法將會返回一個順序(Sequence),否則getSequence()方法返回null。
數(shù)據(jù)對象的順序和表達其屬性值的XML元素一致。如果更新一個數(shù)據(jù)對象的話,那么從該數(shù)據(jù)對象返回的列表或順序,也進行同樣的數(shù)據(jù)操作。
返回的順序可以有效的描述數(shù)據(jù)對象值的任何變化。
數(shù)據(jù)對象有兩種類型的屬性:
由類型(Type)說明的屬性;
不是由類型(Type)說明的屬性,這樣的屬性叫做開放內容(open content);
與數(shù)據(jù)對象類型相關的屬性可以通過getType().getProperties()方法獲得,該方法將返回一個列表。
除了擁有由類型描述的屬性之外,數(shù)據(jù)對象還能夠擁有其它屬性:
處理開放的或者混合的XML內容。
動態(tài)的遭遇新的屬性。
當Type.open為true時,允許擁有開放內容屬性。一些類型將開放(open)設置為false,因為它們不能接受附加的屬性。
一個屬性如果出現(xiàn)在getInstanceProperties()方法返回值中而不是出現(xiàn)在getType().getProperties()方法的返回值中,那么該屬性來源于開放內容。如果一個屬性來源于開放內容,那么isSet(property)方法必定返回true。
如果equals()方法為true的話,由DataType Types說明的屬性可以返回不同的對象。對于多變的數(shù)據(jù)值(例如,日期型或字符串列表),對這些值進行修改直接由實現(xiàn)決定。
當你使用getInstanceProperties()方法時,將返回一個只讀的列表,里面包含一個數(shù)據(jù)對象當前所使用的所有屬性。這包括開放內容的屬性。屬性的順序由所有getType().getProperties()方法返回值開始;其它屬性的順序由實現(xiàn)決定。每一次對getInstanceProperties()方法的調用將返回同一個列表對象,除非該數(shù)據(jù)對象已經(jīng)更新,從而導致列表內容改變。
在一個實例屬性中,通過調用getProperty()方法并基于屬性名就能夠有效的查找數(shù)據(jù)對象上對應的屬性。
為了設置一個該屬性尚未設置(其并未出現(xiàn)在getInstanceProperties()方法返回值中)的開放內容值,一個數(shù)據(jù)對象的設置或創(chuàng)建訪問器,或者在列表或順序中添加,一個屬性的參數(shù)將要被使用,該參數(shù)可以通過訪問TypeHelper或者 XSDHelper查找到。創(chuàng)建一個開放內容的例子可以在135頁“Creating open content XML documents”中找到。
對于所有通過getInstanceProperties()方法獲得的開放內容屬性,其isSet(property)方法將返回真。
當一個數(shù)據(jù)對象擁有多個屬性時,每一個屬性都能夠被一個數(shù)字索引所引用,其中第一個屬性的數(shù)字索引從0開始。
get(int property)方法中使用的屬性索引是該屬性在getInstanceProperties()方法返回的列表中的位置。
如果數(shù)據(jù)正在修改之中,不推薦對開放內容使用索引參數(shù)訪問器;除非該索引被用在getInstanceProperties()方法獲得的屬性中,因為在getInstanceProperties()方法中,開放內容的屬性索引能夠改變,如果幾個開放內容屬性的值能夠被重復的設置和取消設置。
下面的例子是正確的,因為索引和getInstanceProperties()方法一起使用。注意由于數(shù)據(jù)對象不是同步的,因此用戶不應該在讀的同時對其進行更新操作。該實例顯示了一個普通的模式,在所有實例屬性中循環(huán)并且打印屬性名和值:
for (int i=0; i
{
Property p = (Property) myDo.getInstanceProperties().get(i);
System.out.println(p.getName()+"="+myDo.getString(i));
}
getInstanceProperties()方法獲得的屬性的名稱和別名與那些擁有較高的索引的屬性相比,具有一個較高的優(yōu)先級,因此開放內容屬性可以通過使用類型屬性中定義的名稱隱藏其真實名稱,因為這些屬性在列表的開始。優(yōu)先級的順序就是getInstanceProperties()方法返回值中的順序。
在一個復制名稱的事件中,開放內容屬性可以通過它的別名訪問,前提條件是該別名和已有其它屬性的名稱、別名不沖突。
數(shù)據(jù)對象的current state包含所有用來區(qū)分其與由DataFactory創(chuàng)建的新對象的值,因為由DataFactory新創(chuàng)建的對象還沒有屬性集合和容器。數(shù)據(jù)對象的當前狀態(tài)是getInstanceProperties()方法返回值中所有isSet()為真的屬性。容器和包含內容屬性是包含該數(shù)據(jù)對象的數(shù)據(jù)對象的狀態(tài)的一部分。下列程序將打印出數(shù)據(jù)對象myDO的當前狀態(tài):
for (int i=0; i
{
Property p = (Property) myDo.getInstanceProperties().get(i);
if (myDo.isSet(p))
{
System.out.println(p.getName()+"="+myDo.getString(i));
}
}
public interface DataObject extends Serializable
{
Object get(String path);
void set(String path, Object value);
boolean isSet(String path);
void unset(String path);
到此,關于“Java的DataObject怎么用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享名稱:Java的DataObject怎么用
網(wǎng)頁URL:http://weahome.cn/article/ijsgge.html