我有一个数据类
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/