GWT Overlay 深拷贝

标签 gwt overlay clone

制作 gwt 覆盖类型的深拷贝的最佳方法是什么?

我正在寻找一个函数或库来检查 GWT 覆盖并克隆它。它必须能够克隆包含的数组或对象。

谢谢

最佳答案

我会考虑两种方式。大多数时候覆盖对象与 JSON 结合使用,因此您可以将对象字符串化并解析结果:

public native MyOverlayType deepCopy()/*-{
  return JSON.parse(JSON.stringify(this));
}-*/;

public static native MyOverlayType fromJson(String json)/*-{
      return JSON.parse(json);
}-*/;
public native String getJson()/*-{
      return JSON.stringify(this);
}-*/;
public MyOverlayType deepCopy(){
      return fromJson(getJson());
}

另一种选择是纯 javascript 方法,它将维护函数指针等其他内容,并且可能更高效。

public class JsoUtils
{
    @SuppressWarnings("unchecked")
    public static <T extends JavaScriptObject> T deepCopy(T obj)
    {
        return (T) deepCopyImpl(obj);
    }

    private static native JavaScriptObject deepCopyImpl(JavaScriptObject obj)/*-{
        if (typeof obj !== 'object' || obj === null) {
            return obj;
        }

        var c = obj instanceof Array ? [] : {};

        for (var i in obj) {
            if (obj.hasOwnProperty(i)) {
                if (typeof obj[i] !== 'object' || obj[i] === null)
                    c[i] = obj[i];
                else
                    c[i] = @com.example.gwt.client.JsoUtils::deepCopyImpl(Lcom/google/gwt/core/client/JavaScriptObject;)(obj[i]);
            }
        }

        return c;
    }-*/;
}

关于GWT Overlay 深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730463/

相关文章:

url - GWT 编码的查询参数应该如何在服务器端解码?

android - 在运行 Oreo 和 Pie 的设备中如何在锁定屏幕上覆盖布局

android - 谷歌地图 Android Circle 填充不起作用

使用 LFS 从本地存储库进行 Git 克隆

clone() 函数隐式声明

java - GWT:如何在 UiBinder 模板中使用常量

gwt - 我应该如何将 GWT 应用程序构建到 WAR 文件

java - 方括号内的单词 - 正则表达式

video - ffmpeg过滤器顺序旋转比例与覆盖

git - 从 GitHub 克隆存储库