模块 java.desktop

类 DefaultPersistenceDelegate

java.lang.Object
java.beans.PersistenceDelegate
java.beans.DefaultPersistenceDelegate

public class DefaultPersistenceDelegate extends PersistenceDelegate
DefaultPersistenceDelegate 是抽象类 PersistenceDelegate 的具体实现,是默认情况下用于没有可用信息的类的委托。 DefaultPersistenceDelegate 为遵循 JavaBeans 约定的类提供版本弹性、基于公共 API 的持久性,无需任何类特定配置。

关键假设是该类有一个 nullary 构造函数,并且它的状态由匹配的“setter”和“getter”方法对按照内省器返回的顺序准确表示。除了为 JavaBeans 提供无代码持久性之外,DefaultPersistenceDelegate 还提供了一种方便的方法来实现类的持久性存储,这些类具有构造函数,虽然不是空的,但只需要一些属性值作为参数。

自从:
1.4
参见:
  • 构造方法总结

    构造方法
    构造方法
    描述
    为具有 nullary 构造方法的类创建持久性委托。
    DefaultPersistenceDelegate(String[] constructorPropertyNames)
    使用构造函数为类创建默认持久性委托,构造函数的参数是 constructorPropertyNames 指定的属性名称的值。
  • 方法总结

    修饰符和类型
    方法
    描述
    protected void
    initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out)
    initialize 方法的这个默认实现假定保存在这种类型的对象中的所有状态都按照内省器返回的顺序通过匹配的“setter”和“getter”方法对公开。
    protected Expression
    instantiate(Object oldInstance, Encoder out)
    instantiate 方法的默认实现返回一个包含预定义方法名称“new”的表达式,表示使用 DefaultPersistenceDelegate 的构造函数中指定的参数调用构造函数。
    protected boolean
    mutatesTo(Object oldInstance, Object newInstance)
    如果指定构造函数中的参数数量不为零,并且 oldInstance 的类显式声明了“等于”方法,则此方法返回 oldInstance.equals(newInstance) 的值。

    在类 java.beans.PersistenceDelegate 中声明的方法

    writeObject

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造方法详细信息

    • DefaultPersistenceDelegate

      public DefaultPersistenceDelegate()
      为具有 nullary 构造方法的类创建持久性委托。
      参见:
    • DefaultPersistenceDelegate

      public DefaultPersistenceDelegate(String [] constructorPropertyNames)
      使用构造函数为类创建默认持久性委托,构造函数的参数是 constructorPropertyNames 指定的属性名称的值。构造函数参数是通过按提供的顺序评估属性名称来创建的。要使用此类指定单个首选构造函数以用于特定类型的序列化,我们声明构成构造函数参数的属性的名称。例如,未定义 nullary 构造函数的 Font 类可以使用以下持久性委托处理:
         new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
       
      参数:
      constructorPropertyNames - 此构造函数参数的属性名称。
      参见:
  • 方法详情

    • mutatesTo

      protected boolean mutatesTo(Object  oldInstance, Object  newInstance)
      如果指定构造函数中的参数数量不为零,并且 oldInstance 的类显式声明了“等于”方法,则此方法返回 oldInstance.equals(newInstance) 的值。否则,此方法使用超类的定义,如果两个实例的类相等,则返回 true。
      重写:
      mutatesTo 在类 PersistenceDelegate
      参数:
      oldInstance - 要复制的实例。
      newInstance - 要修改的实例。
      返回:
      如果可以通过对 oldInstance 应用一系列突变来创建 newInstance 的等效副本,则为真。
      参见:
    • instantiate

      protected Expression  instantiate(Object  oldInstance, Encoder  out)
      instantiate 方法的默认实现返回一个包含预定义方法名称“new”的表达式,表示使用 DefaultPersistenceDelegate 的构造函数中指定的参数调用构造函数。
      指定者:
      instantiate 在类 PersistenceDelegate
      参数:
      oldInstance - 要实例化的实例。
      out - 代码输出流。
      返回:
      值为 oldInstance 的表达式。
      抛出:
      NullPointerException - 如果 outnull 并且该值用于该方法
      参见:
    • initialize

      protected void initialize(Class <?> type, Object  oldInstance, Object  newInstance, Encoder  out)
      initialize 方法的这个默认实现假定保存在这种类型的对象中的所有状态都按照内省器返回的顺序通过匹配的“setter”和“getter”方法对公开。如果属性描述符定义了一个值等于 Boolean.TRUE 的“瞬态”属性,则此默认实现将忽略该属性。请注意,“瞬态”一词的这种使用完全独立于 ObjectOutputStream 使用的字段修饰符。

      对于每个非瞬态属性,都会创建一个表达式,其中 nullary“getter”方法应用于 oldInstance。此表达式的值是正在序列化的实例中的属性值。如果克隆环境中此表达式的值mutatesTo目标值,则初始化新值使其等同于旧值。在这种情况下,因为属性值没有改变,所以不需要调用相应的“setter”方法,也不会发出任何语句。但是,如果不是,则此值的表达式将替换为另一个表达式(通常是构造函数),并调用相应的“setter”方法以在对象中安装新的属性值。此方案使用此委托从流生成的输出中删除默认信息。

      在将这些语句传递到将在其中执行的输出流时,会对 newInstance 产生副作用。在大多数情况下,这允许值相互依赖的属性问题通过减少需要写入输出的语句数量来实际帮助序列化过程。通常,处理相互依赖的属性的问题被简化为寻找类中属性的顺序,使得没有属性值依赖于后续属性的值。

      重写:
      initialize 在类 PersistenceDelegate
      参数:
      type - 实例的类型
      oldInstance - 要复制的实例。
      newInstance - 要修改的实例。
      out - 应写入任何初始化语句的流。
      抛出:
      NullPointerException - 如果 outnull
      参见: