模块  java.desktop
软件包  java.beans

Class DefaultPersistenceDelegate


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

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

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

      • DefaultPersistenceDelegate

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

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

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

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

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

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