- java.lang.Object
-
- java.beans.PersistenceDelegate
-
- java.beans.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
指定的属性名称的值。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 protected void
initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out)
这个initialize
方法的默认实现假定这个类型的对象中的所有状态都是通过匹配的“setter”和“getter”方法按Introspector返回的顺序公开的。protected Expression
instantiate(Object oldInstance, Encoder out)
instantiate
方法的此默认实现将返回一个表达式,其中包含预定义方法名“new”,表示对具有DefaultPersistenceDelegate
构造函数中指定的参数的构造函数的调用。protected boolean
mutatesTo(Object oldInstance, Object newInstance)
如果指定构造函数中的参数数量不为零,并且类别为oldInstance
显式声明“equals”方法,则此方法返回值为oldInstance.equals(newInstance)
。-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class java.beans.PersistenceDelegate
writeObject
-
-
-
-
构造方法详细信息
-
DefaultPersistenceDelegate
public DefaultPersistenceDelegate()
为具有无效构造函数的类创建持久性委托。
-
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。- 重写:
-
mutatesTo
在PersistenceDelegate
- 参数
-
oldInstance
- 要复制的实例。 -
newInstance
- 要修改的实例。 - 结果
-
如果可以通过将一系列突变应用于
oldInstance
创建newInstance
的等效副本,newInstance
oldInstance
。 - 另请参见:
-
DefaultPersistenceDelegate(String[])
-
instantiate
protected Expression instantiate(Object oldInstance, Encoder out)
instantiate
方法的此默认实现将返回一个表达式,其中包含预定义方法名“new”,该方法表示对具有DefaultPersistenceDelegate
构造函数中指定的参数的构造函数的调用。- Specified by:
-
instantiate
在PersistenceDelegate
- 参数
-
oldInstance
- 要实例化的实例。 -
out
- 代码输出流。 - 结果
-
值为
oldInstance
的表达式。 - 异常
-
NullPointerException
- 如果out
是null
并且该值用于该方法 - 另请参见:
-
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
产生副作用。 在大多数情况下,这允许其值相互依赖的属性的问题实际上帮助序列化过程,使需要写入输出的语句数量更小。 一般来说,处理相互依赖的属性的问题减少到为一个类中的属性找到顺序的问题,使得没有属性值取决于后续属性的值。- 重写:
-
initialize
在PersistenceDelegate
- 参数
-
type
- 实例的类型 -
oldInstance
- 要复制的实例。 -
newInstance
- 要修改的实例。 -
out
- 应写入任何初始化语句的流。 - 异常
-
NullPointerException
- 如果out
是null
- 另请参见:
-
Introspector.getBeanInfo(java.lang.Class<?>)
,PropertyDescriptor
-
-