使用GSON的Java克隆对象
我必须多次克隆一个对象。我的对象是不可序列化的。我正在使用以下函数使用GSON的Java克隆对象,java,clone,Java,Clone,我必须多次克隆一个对象。我的对象是不可序列化的。我正在使用以下函数 @SuppressWarnings("unchecked") public static T cloneThroughJson(T t) { Gson gson = new Gson(); String json = gson.toJson(t); return (T) gson.fromJson(json, t.getClass()); } // ... Object cloned = cloneThrou
@SuppressWarnings("unchecked")
public static T cloneThroughJson(T t) {
Gson gson = new Gson();
String json = gson.toJson(t);
return (T) gson.fromJson(json, t.getClass());
}
// ...
Object cloned = cloneThroughJson(someObject);
我发现每次引用同一个对象时,都会返回这个值。e、 g
假设我首先调用它来表示clonethrroughjson(x)
它返回Y
我再次在同一个函数中调用它clonethrroughjson(x)
。它再次返回Y
您知道如何使用深度克隆在java中克隆不可序列化的对象吗?这似乎是一个已知的问题。如果复制的对象具有默认的无参数构造函数,则您的方法将只起作用。为了实现您想要的,您需要创建一个实例创建者 发件人: 在反序列化对象时,Gson需要创建该类的默认实例 用于序列化和反序列化的行为良好的类应具有无参数构造函数 不管是公共的还是私人的 通常,在处理未定义无参数构造函数的库类时,需要实例创建者 实例创建者示例
private class MoneyInstanceCreator implements InstanceCreator<Money> {
public Money createInstance(Type type) {
return new Money("1000000", CurrencyCode.USD);
}
}
私有类MoneyInstanceCreator实现InstanceCreator{
公款createInstance(类型){
返还新货币(“1000000”,货币代码:美元);
}
}
类型可以是相应的泛型类型
- 调用需要特定泛型类型信息的构造函数非常有用
- 例如,如果Id类存储要为其创建Id的类
你能提供一份报告吗?你怎么知道它返回的是同一个实例?我的类没有参数构造函数。