kotlin为什么多个猫王运算符未返回默认值,而是null

问题描述 投票:0回答:1

当我使用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

json kotlin serialization gson elvis-operator
1个回答
0
投票
是否为null,而不是它们的

example1?.url ?: example2?.url ?: "aaaaaaaaaa"

属性,因为Kotlin认为它们不能无效。
如果您更改为无效类型,则代码会产生预期的输出。
example1

同样的事情适用于

example2

属性。 GSON不会看到
url
默认参数值,如果JSON中的密钥不存在,则将
url
设置为null。通常,GSON不适合与Kotlin一起使用。请参阅这些相关帖子:
1
2

从这个答案

,似乎jackson-module-kotlin
可以识别出这样的默认值,因此请考虑使用Jackson。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.