GWT-RPC 和不可变传输对象

Posted

技术标签:

【中文标题】GWT-RPC 和不可变传输对象【英文标题】:GWT-RPC and immutable transfer objects 【发布时间】:2011-05-27 01:20:15 【问题描述】:

GWT-RPC 要求将传输对象序列化must have a default (zero-argument) constructor。同样,final 字段也不会被序列化(参见 issue 1054)。

另一方面,我知道我应该“最小化可变性”。我的倾向是希望我的 TO 是不可变的,具有最终字段、没有默认构造函数和修改器。

如何在尽可能尊重不可变范式的同时使用 GWT-RPC。我是否必须转换为可变对象才能编组,然后再转换回不可变对象?这还值得吗?

【问题讨论】:

【参考方案1】:

Effective Java 中的第 13 项(第二版中的第 15 项)提供了有关如何最小化可变性或支持不变性的策略。

假设我们删除了 mutators 但保留了非最终字段和默认构造函数。效果将是一个理论上可变的对象,但实际上是一个不可变的对象。是的,我们可以通过反射来改变对象,但需要付出一些努力,但是通过简单地关闭暴露的方法,我们至少可以阻止在这种情况下改变它,因为使对象真正不可变是不切实际的。

【讨论】:

您可以使用反射更改最终字段,因此真正的损失在于代码的自我文档......

以上是关于GWT-RPC 和不可变传输对象的主要内容,如果未能解决你的问题,请参考以下文章

可变对象和不可变对象

python中的可变参数和不可变参数

python可变对象和不可变对象

可变对象和不可变对象之间的区别[重复]

可变对象(immutable)和不可变对象(mutable)

python 可变对象和不可变对象