制作 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/