当我使用gson实例化示例时:
val example1 = Gson().fromJson("{"id": "1"}", Example::class.java)
val example2 = Gson().fromJson("{"id": "2"}", Example::class.java)
我有两个示例,它们的URL为null,因为URL没有值。
看这个表达:val url: String = example1?.url ?: example2?.url ?: "aaaaaaaaaa"
println("url:$url")
我得到了
但表达式bellow返回默认值:
url:null
任何人都知道为什么? 非常感谢!!!!
应该返回默认值
您宣布为不可删除的
val url: String = example1.url ?: example2.url ?: "aaaaaaaaaa"
println("url:$url")
,因此Kotlin在运行时将其设置为null。
表达式中的猫王操作员仅检查url
example1?.url ?: example2?.url ?: "aaaaaaaaaa"
属性,因为Kotlin认为它们不能无效。如果您更改为无效类型,则代码会产生预期的输出。
example1
同样的事情适用于example2
属性。 GSON不会看到
url
默认参数值,如果JSON中的密钥不存在,则将
url
设置为null。通常,GSON不适合与Kotlin一起使用。请参阅这些相关帖子:1
,2。
从这个答案
,似乎jackson-module-kotlin可以识别出这样的默认值,因此请考虑使用Jackson。