在浏览此链接 时如何在 javascript 中进行深度克隆
我遇到了一个通用的克隆方法(在接受的答案中)。我试过直接在 javascript 中运行它,它运行时给出了完美的输出。
我将该代码放在本机标记中,并试图在 GWT 中克隆一个对象。
我试图克隆的班级是
private class Container
{
Integer i = 5;
}
当我尝试这样做时,它只是返回给我相同的对象。有人可以帮忙吗?有什么不清楚的可以问我。万分感谢。
在浏览此链接 时如何在 javascript 中进行深度克隆
我遇到了一个通用的克隆方法(在接受的答案中)。我试过直接在 javascript 中运行它,它运行时给出了完美的输出。
我将该代码放在本机标记中,并试图在 GWT 中克隆一个对象。
我试图克隆的班级是
private class Container
{
Integer i = 5;
}
当我尝试这样做时,它只是返回给我相同的对象。有人可以帮忙吗?有什么不清楚的可以问我。万分感谢。
乔纳森是对的:方法(也是 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
您可能实现此目的的一种方法是使用AutoBeans。
我认为这种方法的唯一技巧是您必须使用 anAutoBeanFactory来创建所有类。
然后,您可以将您的 autobean 编码为Splittable,然后使用结果解码为新的 autobean 实例。