【问题标题】:How can I deep copy an arbitrary object in GWT?如何在 GWT 中深度复制任意对象?
【发布时间】:2011-03-02 16:00:23
【问题描述】:

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

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

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

没有痛苦地手写一个深层克隆,无论如何在 GWT 中完成同样的事情吗?如果这是 Java,我可以考虑将对象序列化为字节数组流并反序列化新副本。

我不能在 GWT 中这样做。可能我可以利用 RPC,因为该对象稍后会发送到 servlet。我只是不知道这是否容易做到。

谁知道我可以做一个深拷贝的简单方法?

【问题讨论】:

  • 是什么生成了您想要克隆的类型?
  • 一种特定领域的语言。这不是可以轻松更改的东西,即使我不喜欢它生成的 500 多个对象,它们都具有额外的 GWT 膨胀来处理深度复制。目前我已经在需要的地方手工编写了深层副本,但即使是一个实例也需要大约 100 行代码。

标签: java gwt


【解决方案1】:

如果你有机会为你的领域类添加接口或注解,你可以使用gwt-ent 进行反射,你可以通过反射轻松编写自己的深拷贝语义。我已经使用这种技术来提高开发模式下的 gwt 序列化性能。

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

【讨论】:

  • 这看起来是一个有趣的项目,但我认为我不能用它来做这个。最后,尽管我讨厌这样做,但我只是手写了很多 deepcopy 代码。
  • 我不是这样解决的(只是最后写了代码),但是链接值得了解。
  • @locka 现在有什么可用的更新吗?我在想我必须做这样的事情。
  • 我刚刚写了一个手工制作的解决方案。我没有进一步追究这个问题。
猜你喜欢
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2017-02-19
  • 1970-01-01
相关资源
最近更新 更多