Java自非序列化

Java自非序列化,java,serialization,gson,this,final,Java,Serialization,Gson,This,Final,我正在尝试编写一个类,该类包含exportToString和importFromString方法。ExportToString将此类序列化为JSON字符串: public String exportToString() { Gson gson = new Gson(); String json = gson.toJson(this); return json; } 我需要写importFromString(stringstr)。问题是“this”变量是最终变量,我无法完

我正在尝试编写一个类,该类包含exportToString和importFromString方法。ExportToString将此类序列化为JSON字符串:

public String exportToString() {
    Gson gson = new Gson();
    String json = gson.toJson(this);
    return json;
}
我需要写importFromString(stringstr)。问题是“this”变量是最终变量,我无法完全重新分配此值。这就是我所拥有的:

public void importFromString(String str) {
    Gson gson = new Gson();
    Object obj = gson.fromJson(str, this.getClass());
    this = (PlayerData) obj;          // ERROR: cannot assign value to final variable this
}

顺便说一句,对不起我的英语

可能是这样的吧

public static PlayerData importFromString(String str) {
    Gson gson = new Gson();
    Object obj = gson.fromJson(str, PlayerData.class);
    return (PlayerData) obj;
}

我认为最简单的方法是将第二个方法设为静态,并返回字符串中表示的对象的实例:

public static PlayerData importFromString(String str) {
  Gson gson = new Gson();
  Object obj = gson.fromJson(str, PlayerData.class);
  return (PlayerData) obj;
}
然后按如下方式调用它:

PlayerData obj = PlayerData.importFromString(someString);

importFromString应该是一个返回PlayerData新实例的静态方法。您可以返回一个新的
PlayerData
,或者更新当前对象的每个变量,以反映jsonpublic静态PlayerData importFromString(String str){Gson Gson Gson=new Gson();object obj=Gson.fromJson中的数据(str,this.getClass());return(PlayerData)obj;}是否正确?ortis,我可以用Java反射实现这一点吗?您需要返回它!或者可能使这两个方法都是静态的?最好将序列化/反序列化逻辑与实际的业务对象分开。如果需要将其序列化为其他格式,该怎么办(例如XML),PlayerData是否应该知道这一点?同意,但问题的风格表明这在现阶段可能有点高级!编译代码始终是一个良好的开端。。。