我有一个数据类
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
保持""
?
答案 0 :(得分:8)
您是否正在使用JSON反序列化库(GSON?),它通过完全回避您在其中构建的初始化来创建对象。很可能它使用低级非JDK调用sun.misc.Unsafe.allocateObject()
为您的对象分配原始数据块,然后继续从解析的JSON填充它。
真正解决这个问题的唯一方法是使用这样一个理解Kotlin并可以复制其对象初始化规则的JSON库。
BTW您的特定JSON示例(明确地将null
指定给非null属性)不应使用默认值,而是抛出验证异常。