对于问题 2:
@Since 主要帮助您进行序列化。版本号更大的字段将被忽略,因此您可以从当前较新的类中为以前的版本编写 JSON。
@Since 对去现实化也有影响,在我看来不是那么有用。使用 @Since 进行反现实化将忽略 JSON 中存在的一些字段以及类中存在的一些字段,如果使用的版本号少于这些字段。在我看来这没什么用,因为您在新课程中阅读新版本的 JSON 就像在新课程中阅读旧版本的 JSON。
JSON 示例:
{
oldField: "value1",
newField: "value2"
}
Java 类:
class MyClass {
@Since(0.0)
public String oldField;
@Since(1.0)
public String newField;
}
Java 测试:
public static void main(String[] args) {
Gson gson = new GsonBuilder().setVersion(0.0).create();
MyClass myClass = gson.fromJson("{oldField: \"value1\", newerField: \"value2\"}", MyClass.class);
System.out.println("read as version 0.0:");
System.out.println(myClass.oldField);
System.out.println(myClass.newField);
Gson gson2 = new GsonBuilder().create();
MyClass myClass2 = gson2.fromJson("{oldField: \"value1\", newField: \"value2\"}", MyClass.class);
System.out.println("read without version specified:");
System.out.println(myClass2.oldField);
System.out.println(myClass2.newField);
}
结果显示如果@Since 更小,newField 是如何被忽略的:
read as version 0.0
value1
null
read without version specified
value1
value2