6

在浏览此链接 时如何在 javascript 中进行深度克隆

我遇到了一个通用的克隆方法(在接受的答案中)。我试过直接在 javascript 中运行它,它运行时给出了完美的输出。

我将该代码放在本机标记中,并试图在 GWT 中克隆一个对象。

我试图克隆的班级是

    private class Container
    {
        Integer i = 5;
    }

当我尝试这样做时,它只是返回给我相同的对象。有人可以帮忙吗?有什么不清楚的可以问我。万分感谢。

4

2 回答 2

2

乔纳森是对的:方法(也是 GWT 中唯一的一种)是使用https://code.google.com/p/google-web-toolkit/wiki/AutoBean

这可能看起来很尴尬,但它工作得很好,因为许多概念都与此相关(RequestFactory 中的 EntityProxy 也依赖于该机制,它是 GWT 的未来)。

深度 json 持久性也适用于自动 bean。

您唯一需要做的就是创建一个描述您的类的接口(并在您的类中实现它):

public interface ContainerBean {
  Integer getI();
  void setI(Integer i);
}

然后创建你的工厂界面

interface MyFactory extends AutoBeanFactory {
  // Factory method for a simple AutoBean
  AutoBean<ContainerBean> container();

  // Factory method for a non-simple type or to wrap an existing instance
  AutoBean<ContainerBean> container(ContainerBean toWrap);
}

现在你可以包装你的对象并克隆它(通过json)

clone() 可以克隆 AutoBean 和存储在其中的属性值。clone() 方法有一个布尔参数,将触发深拷贝或浅拷贝。与 AutoBean 关联的任何标记值都不会被克隆。包装委托对象的 AutoBeans 不能被克隆。

https://code.google.com/p/google-web-toolkit/wiki/AutoBean#clone()

因此请改用此方法: https ://code.google.com/p/google-web-toolkit/wiki/AutoBean#AutoBeanCodex

于 2013-08-11T14:12:25.440 回答
1

您可能实现此目的的一种方法是使用AutoBeans

我认为这种方法的唯一技巧是您必须使用 anAutoBeanFactory来创建所有类。

然后,您可以将您的 autobean 编码为Splittable,然后使用结果解码为新的 autobean 实例。

于 2013-01-11T20:46:02.110 回答