- java.lang.Object
-
- java.beans.PersistenceDelegate
-
- java.beans.DefaultPersistenceDelegate
-
public class DefaultPersistenceDelegate extends PersistenceDelegate
DefaultPersistenceDelegate
是抽象PersistenceDelegate
类的具体实现,是默认情况下用于没有可用信息的类的委托。DefaultPersistenceDelegate
为遵循JavaBeans约定的类提供了版本弹性的基于公共API的持久性,而没有任何特定于类的配置。关键假设是类具有一个无效的构造函数,并且它的状态通过匹配的“setter”和“getter”方法按照Introspector返回的顺序来准确表示。 除了为JavaBeans提供无代码持久性之外,
DefaultPersistenceDelegate
还提供了一种方便的方法,可以为具有构造函数的类实现持久存储,而构造函数虽然不是无效的,但只需要一些属性值作为参数。- 从以下版本开始:
- 1.4
- 另请参见:
-
DefaultPersistenceDelegate(String[])
,Introspector
-
-
构造方法摘要
构造方法 构造器 描述 DefaultPersistenceDelegate()
使用nullary构造函数为类创建持久性委托。DefaultPersistenceDelegate(String[] constructorPropertyNames)
使用构造函数为类创建默认持久性委托,该构造函数的参数是constructorPropertyNames
指定的属性名称的值。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 protected void
initialize(类<?> 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)
。-
声明方法的类 java.beans.PersistenceDelegate
writeObject
-
-
-
-
构造方法详细信息
-
DefaultPersistenceDelegate
public DefaultPersistenceDelegate()
使用nullary构造函数为类创建持久性委托。
-
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
- 如果out
是null
并且该值在方法中使用 - 另请参见:
-
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
产生副作用。 在大多数情况下,这允许通过使需要写入输出的语句数量更小来实现其值相互依赖的属性实际上有助于序列化过程的问题。 通常,处理相互依赖属性的问题被简化为在类中查找属性的顺序,使得属性值不依赖于后续属性的值。- 重写:
-
initialize
类PersistenceDelegate
- 参数
-
type
- 实例的类型 -
oldInstance
- 要复制的实例。 -
newInstance
- 要修改的实例。 -
out
- 应写入任何初始化语句的流。 - 异常
-
NullPointerException
- 如果out
是null
- 另请参见:
-
Introspector.getBeanInfo(java.lang.Class<?>)
,PropertyDescriptor
-
-