@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface Since {
double value();
}
Since
注解是运行时注解,可以标注类属性和类。必须传入一个double
类型的值。
Since
的中文是意思是自从
, 所以,Since
注解的意思就是自从指定的版本
。
Since
的数学表达就是[value, +∞)
当前版本号
处于此区间内,被标注的字段或者是类才能被序列化或反序列化,否则,就不会进行序列化或反序列化。
当前版本号
必须通过如下方法进行设置:
GsonBuilder.setVersion(doubleValue)
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、创建一个实体类:
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
字段才可以被序列化或者被反序列化。