我有此代码:
data class Site(val apikey: String, val id: Int) {
companion object {
val INVALID = Site("", 0)
}
lateinit var name: String
lateinit var city: String
lateinit var country: String
}
然后,在我的代码后面,我为site.city
分配了SQLite数据库中的值:
site.city = cursor.getString(3)
我认为这不会编译,因为cursor.getString
返回可为空的String
,并且Kotlin的字符串默认情况下不可为空。但是,这可以正常编译,但是在运行时会崩溃,并显示以下内容:
java.lang.IllegalStateException:cursor.getString(3)不能为空
因为cursor.getString(3)
返回null
(有效,数据不在数据库中)。我签入调试器,然后getString()
调用正常运行。
答案 0 :(得分:2)
如果Java方法未使用@Nullable
或@NonNull
进行注释,则Kotlin会将其视为platform type,然后将其分配给可为空或不可为空的变量,由您自行决定。您可以使用正确的类型。
在Cursor
的{{1}}方法的特定情况下,它既没有注释,也没有注释-the documentation说getString
的实现界面可以选择是抛出异常还是在错误情况下返回Cursor
:
实现定义了结果以及当列值为null或列类型不是字符串类型时此方法是否引发异常。