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

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

1.2、Until注解的作用

Until的中文是意思是直到, 结合Until的定义,我们可以看出来:Until注解的意思就是直到指定的版本

Until的数学表达就是(-∞, value]

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

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

GsonBuilder.setVersion(doubleValue)
1.3、示例1

1、创建一个实体类:

package com.fpliu.xx

import com.google.gson.annotations.Until

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

该实体类被Until注解,我们传入的参数是6.0,这表示, 直到6.0版本,该类一直都可以被序列化或者被反序列化,如果超过了6.0版本, 那么就不能被序列化或者被反序列化。

2、使用:

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

上面province变量的值是null,这是因为当前版本是7.0, 而实体类的Until注解表明从6.0版本之后,该类不可以被序列化或者被反序列化。

1.4、示例2

1、创建一个实体类:

package com.fpliu.xx

import com.google.gson.annotations.Until

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

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

2、使用:

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

上面province.name变量的值是null,这是因为当前版本是7.0, 而name字段的Until注解表明从6.0版本之后,该字段不可以被序列化或者被反序列化。