gpt4 book ai didi

java - 为什么 Kotlin 接受声明为不可为空字符串的属性中的 null 值?

转载 作者:行者123 更新时间:2023-12-03 03:34:56 28 4
gpt4 key购买 nike

我声明了一个数据类,如下所示:

data class Product(val name: String = "", val price: Float = 0f)

我的代码是:

val json = "{'name': null, 'price': 50.00}"
val gson = GsonBuilder().create()
val p = gson.fromJson(json, Product::class.java)
println("name is ${p.name}")

控制台输出为:name is null

这怎么可能?name 属性不是可为空的字符串。

最佳答案

这是在 Kotlin 中使用 Gson 时的常见问题 - 并且运行时错误在这里发生得太晚,这可能会使您的程序不稳定且易于崩溃。例如,写:

val 名称:String = p.name

繁荣!崩溃。

Gson 简单来说,按照super hacky implementation ,为类分配内存而不调用构造函数,然后使用反射使用 JSON 中存在的值填充字段。

这使得在 Kotlin 的非空属性中存储 null 成为可能,这可能会在运行时导致 NPE。您可以提供定制TypeAdapter禁用您的类的反射。

关于java - 为什么 Kotlin 接受声明为不可为空字符串的属性中的 null 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865612/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com