代码之家  ›  专栏  ›  技术社区  ›  Sira Lam

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

  •  1
  • Sira Lam  · 技术社区  · 6 年前

    我有一门数据课

    data class Bean {
    
        var value: String = ""
    
    }
    

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

    {
        "value":null
    }
    

    我期待的是 value 不是可选的,因此无法分配和 价值 将保持不变 "" .但使用调试器我发现 价值 为null,因此我对其调用的某个方法引发以下异常:

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

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

    我该怎么做 价值 残余 "" ?

    1 回复  |  直到 6 年前
        1
  •  8
  •   Marko Topolnik    6 年前

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

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

    顺便说一句,您的特定JSON示例 null 对于非null属性,不应使用默认值,而是引发验证异常。