【发布时间】:2021-05-10 19:33:33
【问题描述】:
moshi 1.11.0
我有以下从 sportsapidata API 填充的数据类
@JsonClass(generateAdapter = true)
data class PlayerEntity(
@Json(name = "player_id")
val playerId: Int,
val firstname: String,
val lastname: String,
val birthday: String,
val age: Int,
val weight: Int,
val height: Int,
)
问题是,来自 API 的数据对于某些值可能为空,并且想知道创建数据类时的最佳做法是什么。
下面的数据显示weight 和height 为空,但在其他情况下也可能为其他值。
"data": [
{
"player_id": 2497,
"firstname": "Jay-Alistaire Frederick",
"lastname": "Simpson",
"birthday": "1988-12-01",
"age": 32,
"weight": 85,
"height": 180,
},
{
"player_id": 2570,
"firstname": "Simranjit",
"lastname": "Singh Thandi",
"birthday": "1999-10-11",
"age": 21,
"weight": null,
"height": null,
}]
最好为所有值设置nullable types,以便可以为它们分配空值
@JsonClass(generateAdapter = true)
data class PlayerEntity(
@Json(name = "player_id")
val playerId: Int?,
val firstname: String?,
val lastname: String?,
val birthday: String?,
val age: Int?,
val weight: Int?,
val height: Int?,
)
【问题讨论】:
-
如果某些东西真的可以为空,那么您就无能为力了。我会尽量避免拥有可为空的属性。我会尝试为它们分配默认值(何时以及是否有意义)。例如,如果
age为空,也许您可以从birthday中推断出它(如果可用)。或者对于身高/体重的事情,如果它为空,您可以将其设置为0。这完全取决于您接下来对数据做什么。对于后一个示例,只需将属性声明为val weight: Int = 0。 -
只看moshi doc。我认为默认值不会起作用。因为只有在没有将 json 数据字符串序列化到 kotlin 类的值时才会使用默认值。
-
空值 = 缺失值。类构造函数本身如果接收到
null就会赋值默认值,这是Kotlin的东西,不管是moshi、jackson还是gson。