android - 未声明可选的字段接受 null 作为值

标签 android kotlin

我有一个数据类

data class Bean {

    var value: String = ""

}

我从服务器得到了一个 Json:

{
    "value":null
}

我期望的是因为 value 不是可选的,所以不能分配 null 并且 value 将保持为 ""。但是使用调试器我发现 value 是空的,因此我调用它的一些方法抛出了下面的异常:

fun matches(stringToMatch: String): Boolean {
    return this.value.toLowerCase() == stringToMatch.toLowerCase()
}

kotlin.TypeCastException: null 无法转换为非 null 类型 java.lang.String

如何让 value 保持 ""

最佳答案

您正在使用一个 JSON 反序列化库(GSON?),它通过完全回避您内置​​的初始化来创建您的对象。很可能它使用低级的非 JDK 调用 sun.misc.Unsafe.allocateObject()为您的对象分配一个原始数据 block ,然后继续从解析的 JSON 填充它。

真正解决这个问题的唯一方法是使用理解 Kotlin 并可以复制其对象初始化规则的 JSON 库。

顺便说一下,您的特定 JSON 示例,它明确分配了 null对于非 null 属性,不应使用默认值,而是抛出验证异常。

关于android - 未声明可选的字段接受 null 作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713593/

相关文章:

android - 在 Kotlin 中测试私有(private)方法

kotlin - Kotlin Gradle对它的项目家感到困惑

android - GoogleAuthUtil 和 PlusClient

java - 如何更改 BottomNavigationView 中特定项目的 iconTint

java - Android上最近抓包文件事件拦截

java - 如果我在使用 LruCache 类时不重写 sizeof 会发生什么

kotlin - 为什么 Flux.flatMap() 不等待内部发布者完成?

android - 如何使用 Hilt 绑定(bind)/提供 Activity 或 Fragment?

android - Kotlin : Type mismatch: inferred type is Intent? 但 Intent 是预期的

android - 错误 : Program type already present: org. openqa.selenium.WebDriver$ImeHandler