只读(不可变)可序列化类
Posted
技术标签:
【中文标题】只读(不可变)可序列化类【英文标题】:A read only (immutable) serializeable class 【发布时间】:2011-06-11 15:32:22 【问题描述】:我设计了一个具有两个属性的类——字符串类型和对象列表。我正在加载一些 xml 并将其反序列化为类的实例,效果很好。我想要的是每个实例的所有内容都是不可变的。这些类作为 API 公开,为了完整性,我不希望更改对象的值。如果程序员想要不同的东西,他们应该创建新实例并设置值。
通常我会使用 ReadOnlyCollection 和 readonly 属性来执行此操作,但这会扰乱反序列化。我可以在这里做什么?
【问题讨论】:
【参考方案1】:污染你的领域模型是不值得的,只是对 xml 序列化器更友好,这样你就可以实现ISerializable Interface 并为任何不适合序列化的集合编写自己的序列化例程。
void GetObjectData(SerializationInfo info, StreamingContext context)
// ...
【讨论】:
【参考方案2】:你可以在你的课堂上实现ISerializable
。这样,当类被反序列化时,一个特殊的构造函数被调用,你可以让你的类真正不可变
【讨论】:
【参考方案3】:实现 ISerializable 接口并手动完成
【讨论】:
以上是关于只读(不可变)可序列化类的主要内容,如果未能解决你的问题,请参考以下文章
Java原理探索带你探究String类不可变的特性 | Java开发实战