public class DefaultPersistenceDelegate extends PersistenceDelegate
DefaultPersistenceDelegate
是抽象PersistenceDelegate
类的具体实现,是默认情况下用于没有信息可用的类的委托。
DefaultPersistenceDelegate
提供了基于公共API的基于公共API的持久性,用于遵循JavaBeans的惯例而不需要任何类特定配置的类。
关键的假设是类具有一个无效构造函数,并且它的状态按照由Introspector返回的顺序由“setter”和“getter”对匹配对精确地表示。 除了为JavaBeans提供无代码的持久性之外, DefaultPersistenceDelegate
还提供了一种方便的方法来为具有构造函数的类实现持久存储,而构造函数虽然不是空值,但只需要一些属性值作为参数。
DefaultPersistenceDelegate(String[])
, Introspector
Constructor and Description |
---|
DefaultPersistenceDelegate()
为具有无效构造函数的类创建持久性委托。
|
DefaultPersistenceDelegate(String[] constructorPropertyNames)
创建一类默认持久委托构造方法的参数由指定的属性名称的值
constructorPropertyNames 。
|
Modifier and Type | Method and Description |
---|---|
protected void |
initialize(类<?> type, Object oldInstance, Object newInstance, Encoder out)
initialize 方法的这种默认实现假定这种类型的对象中保持的所有状态都是通过匹配的“setter”和“getter”方法按照Introspector返回的顺序公开的。
|
protected Expression |
instantiate(Object oldInstance, Encoder out)
instantiate 方法的此默认实现返回一个表达式,其中包含预定义方法名“new”,表示使用DefaultPersistenceDelegate的构造函数中指定的
DefaultPersistenceDelegate 对构造函数进行调用。
|
protected boolean |
mutatesTo(Object oldInstance, Object newInstance)
如果指定构造函数中的参数数量不为零,并且
oldInstance 类
oldInstance 式声明“equals”方法,则此方法返回值为
oldInstance.equals(newInstance) 。
|
writeObject
public DefaultPersistenceDelegate()
public DefaultPersistenceDelegate(String[] constructorPropertyNames)
constructorPropertyNames
。
构造函数参数是通过按照提供的顺序评估属性名来创建的。
要使用此类来指定用于特定类型的序列化的单个首选构造函数,我们将声明组成构造函数参数的属性的名称。
例如,不能定义Font
构造函数的Font
类可以使用以下持久性委托来处理:
new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
constructorPropertyNames
- 此
constructorPropertyNames
的属性名称。
instantiate(java.lang.Object, java.beans.Encoder)
protected boolean mutatesTo(Object oldInstance, Object newInstance)
oldInstance
类oldInstance
式声明“equals”方法,则此方法返回值为oldInstance.equals(newInstance)
。
否则,此方法使用超类的定义,如果两个实例的类相等,则返回true。
mutatesTo
在类别
PersistenceDelegate
oldInstance
- 要复制的实例。
newInstance
- 要修改的实例。
newInstance
可通过应用一系列突变要创建
oldInstance
。
DefaultPersistenceDelegate(String[])
protected Expression instantiate(Object oldInstance, Encoder out)
instantiate
方法的默认实现返回一个表达式,其中包含预定义的方法名“new”,表示使用DefaultPersistenceDelegate的构造函数中指定的
DefaultPersistenceDelegate
对构造函数进行调用。
instantiate
在
PersistenceDelegate
oldInstance
- 要实例化的实例。
out
- 代码输出流。
oldInstance
。
NullPointerException
- 如果
out
为
null
,并且该值用于该方法
DefaultPersistenceDelegate(String[])
protected void initialize(类<?> type, Object oldInstance, Object newInstance, Encoder out)
initialize
方法的这种默认实现假定这种类型的对象中保存的所有状态都是通过匹配的“setter”和“getter”方法按Introspector返回的顺序公开的。
如果属性描述符定义了一个等于Boolean.TRUE
的值的“transient”属性,则此默认实现将忽略此属性。
请注意,“瞬态”一词的使用与ObjectOutputStream使用的字段修饰符ObjectOutputStream
。
对于每个非瞬态属性,创建一个表达式,其中将“getter”方法应用于oldInstance
。 此表达式的值是要序列化的实例中的属性值。 如果此表达式的值在克隆环境mutatesTo
的目标值为mutatesTo
,则新值将被初始化,使其等同于旧值。 在这种情况下,由于属性值没有改变,所以不需要调用相应的“setter”方法,并且不会发出语句。 如果不是,则该值的表达式将替换为另一个表达式(通常是构造函数),并调用相应的“setter”方法来在对象中安装新的属性值。 此方案从使用此委托的流中生成的输出中删除默认信息。
在将这些语句传递给输出流时,它们将被执行, newInstance
产生副作用。 在大多数情况下,这允许其值相互依赖的属性的问题实际上帮助序列化过程,使需要写入输出的语句数量更小。 一般来说,处理相互依赖的属性的问题减少到为一个类中的属性找到顺序的问题,使得没有属性值取决于后续属性的值。
initialize
在类别
PersistenceDelegate
type
-
type
的类型
oldInstance
- 要复制的实例。
newInstance
- 要修改的实例。
out
- 应写入任何初始化语句的流。
NullPointerException
- 如果
out
是
null
Introspector.getBeanInfo(java.lang.Class<?>)
, PropertyDescriptor