java.lang.Object
java.beans.PersistenceDelegate
java.beans.DefaultPersistenceDelegate
DefaultPersistenceDelegate
是抽象PersistenceDelegate
类的具体实现,是默认用于没有可用信息的类的委托。 DefaultPersistenceDelegate
为遵循JavaBeans约定的类提供了版本弹性的基于公共API的持久性,而无需任何特定于类的配置。
关键假设是该类具有无参数构造函数,并且其状态通过Introspector返回的“setter”和“getter”方法的匹配对准确表示。 除了为JavaBeans提供无代码持久性外,DefaultPersistenceDelegate
还提供了一种方便的方法来为具有构造函数的类提供持久性存储,尽管该构造函数不是无参数的,但只需一些属性值作为参数。
- 自从:
- 1.4
- 参见:
-
Constructor Summary
ConstructorDescription为具有无参数构造函数的类创建持久性委托。DefaultPersistenceDelegate
(String[] constructorPropertyNames) 为具有构造函数的类创建默认持久性委托,其参数是由constructorPropertyNames
指定的属性名称的值。 -
Method Summary
Modifier and TypeMethodDescriptionprotected 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
如果指定构造函数中的参数数量非零,并且oldInstance
的类明确声明了一个“equals”方法,则此方法返回oldInstance.equals(newInstance)
的值。Methods declared in class java.beans.PersistenceDelegate
writeObject
-
Constructor Details
-
DefaultPersistenceDelegate
public DefaultPersistenceDelegate()为具有无参数构造函数的类创建持久性委托。- 参见:
-
DefaultPersistenceDelegate
为具有构造函数的类创建默认持久性委托,其参数是由constructorPropertyNames
指定的属性名称的值。 构造函数参数是通过按照它们提供的顺序评估属性名称来创建的。 要使用此类指定用于序列化特定类型的单个首选构造函数,我们陈述构成构造函数参数的属性名称。 例如,Font
类没有定义无参数构造函数,可以使用以下持久性委托处理:new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
- 参数:
-
constructorPropertyNames
- 此构造函数的参数的属性名称。 - 参见:
-
-
Method Details
-
mutatesTo
如果指定构造函数中的参数数量非零,并且oldInstance
的类明确声明了一个“equals”方法,则此方法返回oldInstance.equals(newInstance)
的值。 否则,此方法使用超类的定义,如果两个实例的类相等,则返回true。- 覆盖:
-
mutatesTo
在类PersistenceDelegate
中 - 参数:
-
oldInstance
- 要复制的实例。 -
newInstance
- 要修改的实例。 - 返回:
-
如果可以通过对
oldInstance
应用一系列变异来创建newInstance
的等效副本,则返回true。 - 参见:
-
instantiate
instantiate
方法的此默认实现返回一个包含预定义方法名“new”的表达式,该方法名表示调用具有DefaultPersistenceDelegate
构造函数中指定的参数的构造函数。- 指定者:
-
instantiate
在类PersistenceDelegate
中 - 参数:
-
oldInstance
- 要实例化的实例。 -
out
- 代码输出流。 - 返回:
-
其值为
oldInstance
的表达式。 - 抛出:
-
NullPointerException
- 如果out
为null
并且此值在方法中使用 - 参见:
-
initialize
initialize
方法的此默认实现假定此类型对象中保存的所有状态都通过Introspector返回的“setter”和“getter”方法的匹配对暴露出来。 如果属性描述符定义了一个具有值等于Boolean.TRUE
的“transient”属性,则此默认实现将忽略该属性。 请注意,这里对“transient”一词的使用与ObjectOutputStream
使用的字段修饰符完全独立。对于每个非瞬态属性,将创建一个表达式,其中将对
oldInstance
应用无参数“getter”方法。 此表达式的值是正在序列化的实例中属性的值。 如果克隆环境中此表达式的值与目标值mutatesTo
,则初始化新值以使其等效于旧值。 在这种情况下,因为属性值未更改,所以无需调用相应的“setter”方法,也不会发出语句。 但是,如果不是,则将为此值的表达式替换为另一个表达式(通常是构造函数),并调用相应的“setter”方法将新属性值安装到对象中。 此方案从使用此委托的流生成的输出中删除了默认信息。通过将这些语句传递给将执行它们的输出流,副作用会对
newInstance
进行更改。 在大多数情况下,这允许具有相互依赖属性的问题实际上通过使需要写入输出的语句数量更少来帮助序列化过程。 通常,处理相互依赖属性的问题被简化为找到类中属性的顺序,使得没有属性值依赖于后续属性的值。- 覆盖:
-
initialize
在类PersistenceDelegate
中 - 参数:
-
type
- 实例的类型 -
oldInstance
- 要复制的实例。 -
newInstance
- 要修改的实例。 -
out
- 应写入任何初始化语句的流。 - 抛出:
-
NullPointerException
- 如果out
为null
- 参见:
-