Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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

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
Javascript GWT中的深度克隆_Javascript_Gwt_Clone - Fatal编程技术网

Javascript GWT中的深度克隆

Javascript GWT中的深度克隆,javascript,gwt,clone,Javascript,Gwt,Clone,在浏览此链接时 我遇到了一个通用的克隆方法(在公认的答案中)。我试着直接在javascript中运行它,它的运行提供了完美的输出 我将代码放在原生标记中,并尝试在GWT中克隆一个对象 我要克隆的类是 private class Container { Integer i = 5; } 当我尝试这样做时,它只是返回给我相同的对象。有人能帮忙吗? 如果不清楚,可以问我任何问题。非常感谢。实现这一目标的一个方法是使用 我认为这个方法的唯一诀窍是必须使用Aut

在浏览此链接时

我遇到了一个通用的克隆方法(在公认的答案中)。我试着直接在javascript中运行它,它的运行提供了完美的输出

我将代码放在原生标记中,并尝试在GWT中克隆一个对象

我要克隆的类是

    private class Container
    {
        Integer i = 5;
    }
当我尝试这样做时,它只是返回给我相同的对象。有人能帮忙吗?
如果不清楚,可以问我任何问题。非常感谢。

实现这一目标的一个方法是使用

我认为这个方法的唯一诀窍是必须使用
AutoBeanFactory
来创建所有类


然后,您可以将autobean编码为一个拆分表,然后使用结果解码为一个新的autobean实例。

Jonathan是正确的:方法(也是GWT中唯一的方法)是使用

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

深度json持久性也可以与自动bean一起使用

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

然后创建工厂界面

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);
}
接口MyFactory扩展了AutoBeanFactory{
//简单AutoBean的工厂方法
AutoBean容器();
//用于非简单类型或包装现有实例的工厂方法
AutoBean集装箱(集装箱Bean拖缆);
}
现在您可以包装并克隆对象(通过json)

克隆() 可以克隆自动bean及其存储的属性值。 clone()方法具有一个布尔参数,该参数将触发一个深度或 浅薄的副本。与自动bean关联的任何标记值都不会 被克隆。无法克隆包装委托对象的自动bean

因此,请改用此方法:

您不使用Java方式的任何原因™ ? (例如,向类中添加一个
clone()
方法,或者如果您根本没有多态性,则添加一个副本构造函数:
publiccontainer(Container Container){…}
。然后我将不得不编写clone())方法。我试图得到一个通用的克隆函数来为我完成这项工作。实际上,这是在继续:我不确定我对使用
AutoBean
s执行深度复制的感觉如何,但它应该可以做到这一点。
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);
}