Module java.desktop
Package java.beans

Class DefaultPersistenceDelegate

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

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

关键假设是该类具有无参数构造函数,并且其状态通过Introspector返回的“setter”和“getter”方法的匹配对准确表示。 除了为JavaBeans提供无代码持久性外,DefaultPersistenceDelegate还提供了一种方便的方法来为具有构造函数的类提供持久性存储,尽管该构造函数不是无参数的,但只需一些属性值作为参数。

自从:
1.4
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    为具有无参数构造函数的类创建持久性委托。
    DefaultPersistenceDelegate(String[] constructorPropertyNames)
    为具有构造函数的类创建默认持久性委托,其参数是由constructorPropertyNames指定的属性名称的值。
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out)
    initialize方法的此默认实现假定此类型对象中保存的所有状态都通过Introspector返回的“setter”和“getter”方法的匹配对暴露出来。
    protected Expression
    instantiate(Object oldInstance, Encoder out)
    instantiate方法的此默认实现返回一个包含预定义方法名“new”的表达式,该方法名表示调用具有DefaultPersistenceDelegate构造函数中指定的参数的构造函数。
    protected boolean
    mutatesTo(Object oldInstance, Object newInstance)
    如果指定构造函数中的参数数量非零,并且oldInstance的类明确声明了一个“equals”方法,则此方法返回oldInstance.equals(newInstance)的值。

    Methods declared in class java.beans.PersistenceDelegate

    writeObject

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • DefaultPersistenceDelegate

      public DefaultPersistenceDelegate()
      为具有无参数构造函数的类创建持久性委托。
      参见:
    • DefaultPersistenceDelegate

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

    • mutatesTo

      protected boolean mutatesTo(Object oldInstance, Object newInstance)
      如果指定构造函数中的参数数量非零,并且oldInstance的类明确声明了一个“equals”方法,则此方法返回oldInstance.equals(newInstance)的值。 否则,此方法使用超类的定义,如果两个实例的类相等,则返回true。
      覆盖:
      mutatesTo 在类 PersistenceDelegate
      参数:
      oldInstance - 要复制的实例。
      newInstance - 要修改的实例。
      返回:
      如果可以通过对oldInstance应用一系列变异来创建newInstance的等效副本,则返回true。
      参见:
    • 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方法的此默认实现假定此类型对象中保存的所有状态都通过Introspector返回的“setter”和“getter”方法的匹配对暴露出来。 如果属性描述符定义了一个具有值等于Boolean.TRUE的“transient”属性,则此默认实现将忽略该属性。 请注意,这里对“transient”一词的使用与ObjectOutputStream使用的字段修饰符完全独立。

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

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

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