|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.beans.PersistenceDelegate java.beans.DefaultPersistenceDelegate
public class DefaultPersistenceDelegate
DefaultPersistenceDelegate
是 PersistenceDelegate
抽象類別的具體實作,是沒有關於其可用資訊的類別在預設情況下使用的委託。DefaultPersistenceDelegate
為遵從 JavaBeans 慣例的類別提供可恢復的、基於公共 API 的持久性,而無需任何特定於類別的配置。
關鍵假定是:該類別有一個 null 建構子,並通過按照 Introspector 返回的順序比對 "setter" 和 "getter" 方法對來精確地表示其狀態。除了為 JavaBeans 提供無需編寫程式碼的持久性,對於那些建構子為非 null 時只需要將一些屬性值作為參數的類別,DefaultPersistenceDelegate
提供了一個實作持久存儲的便捷方法。
DefaultPersistenceDelegate(String[])
,
Introspector
建構子摘要 | |
---|---|
DefaultPersistenceDelegate()
為具有 null 建構子的類別創建持久委託。 |
|
DefaultPersistenceDelegate(String[] constructorPropertyNames)
為其建構子的參數是屬性名稱值(由 constructorPropertyNames 指定)的類別創建預設持久委託。 |
方法摘要 | |
---|---|
protected void |
initialize(Class<?> type,
Object oldInstance,
Object newInstance,
Encoder out)
initialize 方法的此預設實作假設保存在此型別物件中的所有狀態都是通過比對 "setter" 和 "getter" 方法對來公開的,公開的順序是 Introspector 返回它們的順序。 |
protected Expression |
instantiate(Object oldInstance,
Encoder out)
instantiate 方法的此預設實作返回一個表達式,該表達式包含預先定義的方法名稱 "new",該名稱表示調用帶有參數(在 DefaultPersistenceDelegate 的建構子中指定)的建構子。 |
protected boolean |
mutatesTo(Object oldInstance,
Object newInstance)
如果指定建構子中的參數數量不為零,且 oldInstance 的類別顯式宣告了一個 "equals" 方法,則此方法返回 oldInstance.equals(newInstance) 的值。 |
從類別 java.beans.PersistenceDelegate 繼承的方法 |
---|
writeObject |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
public DefaultPersistenceDelegate()
DefaultPersistenceDelegate(java.lang.String[])
public DefaultPersistenceDelegate(String[] constructorPropertyNames)
constructorPropertyNames
指定)的類別創建預設持久委託。建構子參數是通過按提供順序對屬性名稱求值來創建的。要使用此類別指定特定型別序列化中使用的單個首選建構子,需要宣告組成建構子參數的屬性的名稱。例如,沒有定義 null 建構子的 Font
類別可以使用以下持久委託來處理:
new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
constructorPropertyNames
- 此建構子參數的屬性名稱。instantiate(java.lang.Object, java.beans.Encoder)
方法詳細資訊 |
---|
protected boolean mutatesTo(Object oldInstance, Object newInstance)
oldInstance
的類別顯式宣告了一個 "equals" 方法,則此方法返回 oldInstance.equals(newInstance)
的值。否則,此方法使用父級類別的定義,即在兩個實例的類別相等情況下返回 true。
PersistenceDelegate
中的 mutatesTo
oldInstance
- 要複製的實例。newInstance
- 要修改的實例。
oldInstance
施加一系列變換可以創建 newInstance
的等效副本,則返回 true。DefaultPersistenceDelegate(String[])
protected Expression instantiate(Object oldInstance, Encoder out)
instantiate
方法的此預設實作返回一個表達式,該表達式包含預先定義的方法名稱 "new",該名稱表示調用帶有參數(在 DefaultPersistenceDelegate
的建構子中指定)的建構子。
PersistenceDelegate
中的 instantiate
oldInstance
- 要實例化的實例。out
- 程式碼輸出串流。
oldInstance
的一個表達式。DefaultPersistenceDelegate(String[])
protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out)
initialize
方法的此預設實作假設保存在此型別物件中的所有狀態都是通過比對 "setter" 和 "getter" 方法對來公開的,公開的順序是 Introspector 返回它們的順序。如果屬性描述符使用等於 Boolean.TRUE
的值來定義一個 "transient"屬性,則此預設實作將忽略該屬性。注意,單詞 "transient" 的使用完全獨立於 ObjectOutputStream
使用的欄位修飾符。
對於每個非瞬態屬性,創建一個表達式,在其中將非 null "getter" 方法應用於 oldInstance
。此表達式的值是將被序列化實例中的屬性值。如果在複製環境中此表達式的值 (mutatesTo
目標值),則將初始化新值,使其等於舊值。在這種情況下,因為屬性值沒有發生更改,所以不需要調用相應的 "setter" 方法,也不需要發出宣告。不然的話此值的表達式就會被另一個表達式(通常是一個建構子)替代,並且要調用相應的 "setter" 方法,在物件中安裝新屬性值。此方案使用此代理從串流產生的輸出中移除預設資訊。
在將這些語句傳遞到輸出串流(這些語句將在其中執行)時,newInstance
將產生副作用。在大多數情況下,這允許其值相互依賴的屬性的問題通過減少需要寫入到輸出的語句量來實際說明序列化進程。通常,處理相互依賴的屬性問題被歸結為這樣一個問題:找出類別中屬性的某種順序,從而沒有任何屬性依賴後續屬性的值。
PersistenceDelegate
中的 initialize
oldInstance
- 要複製的實例。newInstance
- 需修改的實例。out
- 所有的初始化語句都應該寫入其中的串流。Introspector.getBeanInfo(java.lang.Class>)
,
PropertyDescriptor
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。