Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在GWT中深度复制任意对象?_Java_Gwt - Fatal编程技术网

Java 如何在GWT中深度复制任意对象?

Java 如何在GWT中深度复制任意对象?,java,gwt,Java,Gwt,我有一个标记为可序列化的任意对象。它有各种表示货币金额、集合等的可变子对象。我希望能够克隆此对象,因此,如果用户修改它,然后恢复其操作,我可以用新的克隆替换克隆 这意味着我需要一个深度副本,因为我不希望用户对子对象的更改(例如,从集合中添加/插入项目)出现在原始副本上 这些对象没有实现可克隆性,因为它们是自动生成的,所以我也不能添加这样的方法 除了痛苦的笔迹,在GWT中是否还有一个深度克隆来完成同样的任务?如果这是java,我可以考虑将对象序列化为字节数组流,并反序列化一个新的副本。 我不能在G

我有一个标记为可序列化的任意对象。它有各种表示货币金额、集合等的可变子对象。我希望能够克隆此对象,因此,如果用户修改它,然后恢复其操作,我可以用新的克隆替换克隆

这意味着我需要一个深度副本,因为我不希望用户对子对象的更改(例如,从集合中添加/插入项目)出现在原始副本上

这些对象没有实现可克隆性,因为它们是自动生成的,所以我也不能添加这样的方法

除了痛苦的笔迹,在GWT中是否还有一个深度克隆来完成同样的任务?如果这是java,我可以考虑将对象序列化为字节数组流,并反序列化一个新的副本。 我不能在GWT里这么做。我可能会利用RPC,因为对象稍后会发送到servlet。我只是不知道这是否容易做到


有谁知道我可以做深度复制的简单方法吗?

如果您有机会向域类添加接口或注释,您可以使用反射,并且可以通过反射轻松编写自己的深度复制语义。我已经使用此技术来提高开发模式下的gwt序列化性能


作为另一种解决方案,您可以使用gwt默认的深度复制序列化机制,但我不知道如何实现这一目标

是什么生成了要克隆的类型?特定于域的语言。它不是可以轻易改变的东西,即使可以,我也不喜欢它生成的500多个对象都有额外的GWT膨胀来处理深度复制。目前,我已经在需要的地方手工编写了deepcopy,但即使是一个实例也需要大约100行代码。这看起来是一个有趣的项目,但我认为我无法将其用于此。最后,我只是手工编写了deepcopy代码,尽管我不喜欢这样做。这不是我解决它的方式(只是在最后编写了代码),但链接值得知道。@lock现在有什么可用的更新吗?我在想,我必须做这样的事情。我刚刚写了一个手工制作的解决方案。我没有进一步追问这个问题。