Module  java.desktop
软件包  java.beans

Class DefaultPersistenceDelegate



  • public class DefaultPersistenceDelegate
    extends PersistenceDelegate
    DefaultPersistenceDelegate是抽象的PersistenceDelegate类的具体实现,默认情况下用于没有信息可用的类的委托。 DefaultPersistenceDelegate提供了基于公共API的基于公共API的持久性,用于遵循JavaBeans的惯例而不需要任何类特定配置的类。

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

    从以下版本开始:
    1.4
    另请参见:
    DefaultPersistenceDelegate(String[])Introspector
    • 构造方法摘要

      构造方法  
      Constructor 描述
      DefaultPersistenceDelegate​()
      为具有无效构造函数的类创建持久性委托。
      DefaultPersistenceDelegate​(String[] constructorPropertyNames)
      为具有构造函数的类创建默认持久性委托,该构造函数的参数是由 constructorPropertyNames指定的属性名称的值。
    • 构造方法详细信息

      • DefaultPersistenceDelegate

        public DefaultPersistenceDelegate​(String[] constructorPropertyNames)
        为具有构造函数的类创建默认持久性委托,该构造函数的参数是由constructorPropertyNames指定的属性名称的值。 构造函数参数是通过按照提供的顺序评估属性名来创建的。 要使用此类来指定用于特定类型的序列化的单个首选构造函数,我们将声明组成构造函数参数的属性的名称。 例如,不能定义空值构造函数的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。
        重写:
        mutatesToPersistenceDelegate
        参数
        oldInstance - 要复制的实例。
        newInstance - 要修改的实例。
        结果
        如果可以通过将一系列突变应用于 oldInstance创建 newInstance的等效副本, newInstance oldInstance
        另请参见:
        DefaultPersistenceDelegate(String[])
      • instantiate

        protected Expression instantiate​(Object oldInstance,
                                         Encoder out)
        instantiate方法的此默认实现将返回一个表达式,其中包含预定义方法名“new”,该方法表示对具有 DefaultPersistenceDelegate构造函数中指定的参数的构造函数的调用。
        Specified by:
        instantiatePersistenceDelegate
        参数
        oldInstance - 要实例化的实例。
        out - 代码输出流。
        结果
        值为 oldInstance的表达式。
        异常
        NullPointerException - 如果 outnull并且该值用于该方法
        另请参见:
        DefaultPersistenceDelegate(String[])
      • initialize

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

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

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

        重写:
        initializePersistenceDelegate
        参数
        type - 实例的类型
        oldInstance - 要复制的实例。
        newInstance - 要修改的实例。
        out - 应写入任何初始化语句的流。
        异常
        NullPointerException - 如果 outnull
        另请参见:
        Introspector.getBeanInfo(java.lang.Class<?>)PropertyDescriptor