public abstract class PersistenceDelegate extends Object
readObject
和
writeObject
方法由
ObjectOutputStream
,溪流像使用代理模式的
XMLEncoder
可以独立地控制自己的课堂行为。通常情况下,类是把这样的信息和公约的最好的地方可以很容易地表示在这个代表团计划,这样做。然而,有时,它是一个小的问题,在一个类中的一个小的问题,防止整个对象图被写入,这可以让应用程序开发人员没有追索权,但试图阴影的问题类在本地或使用替代持久性技术。在这样的情况下,代表团模型给出了一个相对干净的机制,为应用程序开发人员进行干预的序列化过程的所有部分,而不需要修改的类的实现,这是不是应用程序本身的一部分。
除了使用代理模式,这种持久方案不同于传统的序列化方案要求的writeObject
方法模拟没有相应的readObject
方法。writeObject
模拟编码的每个实例在其公开的API,不需要定义readObject
模拟由于程序读取序列化的形式是由方法调用的语义定义了java语言规范。打破依赖之间writeObject
和readObject
实现,这可能会改变在版本,是在使用这种技术免疫类的所指的私人档案实现变化产生的关键因素。
一个持久化委托,可以控制对象的持久性的所有方面,包括:
XMLEncoder
Constructor and Description |
---|
PersistenceDelegate() |
Modifier and Type | Method and Description |
---|---|
protected void |
initialize(类<?> type, Object oldInstance, Object newInstance, Encoder out)
产生一系列的副作用,对
newInstance 使新实例就相当于
oldInstance 报表。
|
protected abstract Expression |
instantiate(Object oldInstance, Encoder out)
返回一个表达式的值是
oldInstance 。
|
protected boolean |
mutatesTo(Object oldInstance, Object newInstance)
如果一个
oldInstance 等效副本可以通过一系列的陈述
newInstance 创建返回true。
|
void |
writeObject(Object oldInstance, Encoder out)
的
writeObject 是一个单一的入口点的持久性和由传统模式的代表团
Encoder 使用。
|
public void writeObject(Object oldInstance, Encoder out)
writeObject
是一个单一的入口点的持久性和由传统模式的代表团
Encoder
使用。虽然这种方法不是最终的,它不需要子类在正常情况下。
此实现的第一个检查,看看是否流已经遇到了这个对象。接下来的mutatesTo
方法来看看从返回的流,候选人可以变成oldInstance
准确复制。如果可以,那initialize
方法来执行初始化。如果没有,候选人是从流中删除,并instantiate
方法来创建这个对象的一个新的候选。
oldInstance
的实例,将由这个表达式创建。
out
流-这将是书面表达。
null
out
NullPointerException
protected boolean mutatesTo(Object oldInstance, Object newInstance)
oldInstance
等效副本可以通过一系列的陈述
newInstance
创建返回true。在这种方法的规范,我们所说的等效,修饰的实例在其公共API的相关方法的行为
oldInstance
区分。[注:我们用短语相关的方法而不是所有的方法在这里,只因为,是完全正确的,方法如
hashCode
和
toString
防止大多数类产生的实例]真正区分副本。
如果两个实例的类是相同的默认行为的回报true
。
oldInstance
-实例被复制。
newInstance
的实例,是要修改。
newInstance
等效副本可以通过一系列的突变
oldInstance
创建应用。
protected abstract Expression instantiate(Object oldInstance, Encoder out)
oldInstance
。这种方法被用来表征构造函数或工厂方法应用于创建特定对象。例如,对于
Field
类持久委托
instantiate
方法可以定义如下:
域F =(场)oldinstance;返回新的表达(F,F getdeclaringclass(),“GetField”,新的对象[ ] { F. getname() });注意我们声明的返回表达式的值,表达式的值(返回的
getValue
)是相同的
oldInstance
。
oldInstance
的实例,将由这个表达式创建。
out
流-这将是书面表达。
oldInstance
。
NullPointerException
-如果
out
是
null
,该值用于方法
protected void initialize(类<?> type, Object oldInstance, Object newInstance, Encoder out)
newInstance
使新实例就相当于
oldInstance
报表。在这种方法的规范,我们所说的等效,方法返回后,修改后的实例是在其公共API的所有方法的行为
newInstance
区分。
实现这一目标的实现是通过制造一系列的“发生了什么”涉及oldInstance
及其公开的状态报表。这些陈述是向使用其writeExpression
方法返回一个包含一个克隆的环境中读取输入流的状态模拟元素表达的输出流。返回的每一个语句都会有所有的实例旧的环境取代了在新的对象中存在的对象。特别是,对这些语句的目标引用,它开始作为参考oldInstance
是作为参考的newInstance
而返回。执行这些语句的效果的两个对象的状态的增量对齐作为一系列的修改在新的环境中的对象。在初始化方法返回的时候,它应该是不可能的,通过使用他们的公共的接口来告诉这两个实例。最重要的是,用于使这些对象的步骤的顺序出现相当于将已记录的输出流,并将形成实际输出时,流被刷新。
默认的实现,调用父类的类型的initialize
方法。
type
-实例的类型
oldInstance
-实例被复制。
newInstance
的实例,是要修改。
out
-流中的任何初始化语句应写。
null
out
NullPointerException
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.