Vin*_*ade 5 java android gson kotlin
我这样声明data class:
data class Product(val name: String = "", val price: Float = 0f)
Run Code Online (Sandbox Code Playgroud)
我的代码是:
val json = "{'name': null, 'price': 50.00}"
val gson = GsonBuilder().create()
val p = gson.fromJson(json, Product::class.java)
println("name is ${p.name}")
Run Code Online (Sandbox Code Playgroud)
控制台输出是: name is null
这怎么可能?name 属性不是可为空的字符串。
这是在 Kotlin 中使用 Gson 时的常见问题 - 运行时错误在这里发生得太晚了,这可能会使您的程序不稳定且容易崩溃。例如,写:
val name: String = p.name
繁荣!碰撞。
Gson 只是按照super hacky implementation,在不调用构造函数的情况下为类分配内存,然后使用反射用 JSON 中存在的值填充字段。
这使得可以存储null在 Kotlin 的非空属性中,这可能会在运行时导致 NPE。您可以提供自定义TypeAdapter来禁用您的类的反射。
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |