@Since
1.1、Since注解的定义
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface Since {
    double value();
}

Since注解是运行时注解,可以标注类属性和类。必须传入一个double类型的值。

1.2、Since注解的作用

Since的中文是意思是自从, 所以,Since注解的意思就是自从指定的版本

Since的数学表达就是[value, +∞)

当前版本号处于此区间内,被标注的字段或者是类才能被序列化或反序列化,否则,就不会进行序列化或反序列化。

当前版本号必须通过如下方法进行设置:

GsonBuilder.setVersion(doubleValue)
1.3、示例1

1、创建一个实体类:

package com.fpliu.xx

import com.google.gson.annotations.Since

@Since(6.0)
data class Province(
    var id: Int,
    var name: String = "",
    var cities: List = listOf()
)

该实体类被Since注解,我们传入的参数是6.0,这表示, 从6.0版本开始,该类可以被序列化或者被反序列化。

2、使用:

val json = """{"id":10, "name":"内蒙古", cities:["呼和浩特", "鄂尔多斯", "包头"]}"""
val gson = GsonBuilder().setVersion(5.0).create()
val province = gson.fromJson(json, Province::class.java)

上面province变量的值是null,这是因为当前版本是5.0, 而实体类的Since注解表明从6.0版本开始,该类才可以被序列化或者被反序列化。

1.4、示例2

1、创建一个实体类:

package com.fpliu.xx

import com.google.gson.annotations.Since

data class Province(
    var id: Int,
    @Since(6.0)
    var name: String = "",
    var cities: List = listOf()
)

该实体类中的name字段被Since注解,我们传入的参数是6.0,这表示, 从6.0版本开始,该类可以被序列化或者被反序列化。

2、使用:

val json = """{"id":10, "name":"内蒙古", cities:["呼和浩特", "鄂尔多斯", "包头"]}"""
val gson = GsonBuilder().setVersion(5.0).create()
val province = gson.fromJson(json, Province::class.java)

上面province.name变量的值是null,这是因为当前版本是5.0, 而name字段的Since注解表明从6.0版本开始,name字段才可以被序列化或者被反序列化。