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

时间:2018-06-06 06:30:53

标签: android kotlin

我有一个数据类

data class Bean {

    var value: String = ""

}

我从服务器获得了Json:

{
    "value":null
}

我期望的是value不是可选的,因此无法分配空值,value将保留为""。但是使用调试器我发现value为空,因此我调用的一些方法抛出以下异常:

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

kotlin.TypeCastException: null cannot be cast to non-null type java.lang.String

如何让value保持""

1 个答案:

答案 0 :(得分:8)

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

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

BTW您的特定JSON示例(明确地将null指定给非null属性)不应使用默认值,而是抛出验证异常。