JavaTM 2 Platform
Standard Ed. 6

java.beans
類別 DefaultPersistenceDelegate

java.lang.Object
  繼承者 java.beans.PersistenceDelegate
      繼承者 java.beans.DefaultPersistenceDelegate

public class DefaultPersistenceDelegate
extends PersistenceDelegate

DefaultPersistenceDelegatePersistenceDelegate 抽象類別的具體實作,是沒有關於其可用資訊的類別在預設情況下使用的委託。DefaultPersistenceDelegate 為遵從 JavaBeans 慣例的類別提供可恢復的、基於公共 API 的持久性,而無需任何特定於類別的配置。

關鍵假定是:該類別有一個 null 建構子,並通過按照 Introspector 返回的順序比對 "setter" 和 "getter" 方法對來精確地表示其狀態。除了為 JavaBeans 提供無需編寫程式碼的持久性,對於那些建構子為非 null 時只需要將一些屬性值作為參數的類別,DefaultPersistenceDelegate 提供了一個實作持久存儲的便捷方法。

從以下版本開始:
1.4
另請參見:
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
 

建構子詳細資訊

DefaultPersistenceDelegate

public DefaultPersistenceDelegate()
為具有 null 建構子的類別創建持久委託。

另請參見:
DefaultPersistenceDelegate(java.lang.String[])

DefaultPersistenceDelegate

public DefaultPersistenceDelegate(String[] constructorPropertyNames)
為其建構子的參數是屬性名稱值(由 constructorPropertyNames 指定)的類別創建預設持久委託。建構子參數是通過按提供順序對屬性名稱求值來創建的。要使用此類別指定特定型別序列化中使用的單個首選建構子,需要宣告組成建構子參數的屬性的名稱。例如,沒有定義 null 建構子的 Font 類別可以使用以下持久委託來處理:
     new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
 

參數:
constructorPropertyNames - 此建構子參數的屬性名稱。
另請參見:
instantiate(java.lang.Object, java.beans.Encoder)
方法詳細資訊

mutatesTo

protected boolean mutatesTo(Object oldInstance,
                            Object newInstance)
如果指定建構子中的參數數量不為零,且 oldInstance 的類別顯式宣告了一個 "equals" 方法,則此方法返回 oldInstance.equals(newInstance) 的值。否則,此方法使用父級類別的定義,即在兩個實例的類別相等情況下返回 true。

覆寫:
類別 PersistenceDelegate 中的 mutatesTo
參數:
oldInstance - 要複製的實例。
newInstance - 要修改的實例。
返回:
如果通過對 oldInstance 施加一系列變換可以創建 newInstance 的等效副本,則返回 true。
另請參見:
DefaultPersistenceDelegate(String[])

instantiate

protected Expression instantiate(Object oldInstance,
                                 Encoder out)
instantiate 方法的此預設實作返回一個表達式,該表達式包含預先定義的方法名稱 "new",該名稱表示調用帶有參數(在 DefaultPersistenceDelegate 的建構子中指定)的建構子。

指定者:
類別 PersistenceDelegate 中的 instantiate
參數:
oldInstance - 要實例化的實例。
out - 程式碼輸出串流。
返回:
值為 oldInstance 的一個表達式。
另請參見:
DefaultPersistenceDelegate(String[])

initialize

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