并非复杂问题,只是做一个记录。
问题缘由
检查一个老功能的时候,服务端发现的一个问题,一个时间戳,服务端不一定返回,问移动端怎么接收处理的。检查移动端为 Gson 库和 kotlin data class 进行的接收。服务端如果不返回此值,移动端默认为0。
Java 基本数据类型和封装类型的 json 解析区别
答案如下:
Gson 解析后,如果 json 数据中,没有对应的值。
Java 代码。int 类型默认为 0,Integer 类型默认为 null。
Kotlin 代码,都是 Int。Int 类型默认为 0,Int? 类型默认为 null。
代码如下: 待解析内容
{
"username": "Android"
}
解析方式为使用 Gson 的基础方式。不增加类型适配之类的功能。
new Gson().fromJson("", xx.class);
java 类 1
public class User {
public String username;
public int age;
}
结果:username->Android, age->0
java 类 2
public class User {
public String username;
public Integer age;
}
结果:username->Android, age->null
kotlin data class 1
data class User(val username:String,val age:Int)
结果:username->Android, age->0
kotlin data class 2
data class User(val username:String,val age:Int?)
结果:username->Android, age->null
什么时候有用?
一些用基础类型值的地方,并且需要判断是否有此值的情况,就不能用有默认值的方法。