我正在定义我的用户 SQLite 数据库表,为此,我创建了以下 UserContract 和 UserEntry 类:
class UserContract private constructor(){
class UserEntry private constructor(): BaseColumns {
companion object {
val TABLE_NAME = "users"
val COLUMN_DISPLAY_NAME = "display_name"
val COLUMN_EMAIL = "email"
//...
}
}
}
我面临的问题是我无法访问 BaseColums 实现提供的 _ID 属性:
val columnDisplayName = UserContract.UserEntry.COLUMN_DISPLAY_NAME //It is OK
val columnId = UserContract.UserEntry._ID //Unresolved reference: _ID
Java 中的等效代码运行良好,那么,有谁知道是什么原因或错误在哪里?
最佳答案
您只能使用 BaseColumns._ID
访问它,因为它是一个定义常量的 Java 接口(interface)。
在 Kotlin 中,伴生对象是具有继承性的实际对象,而在 java 中,具有静态方法的类的行为并不像对象。
例如,如果您将 BaseColumns
作为 kotlin 类而不是 java 接口(interface),则可以执行以下操作:
open class KBaseColumns {
val _ID = "_id"
}
class UserContract private constructor(){
class UserEntry private constructor(): BaseColumns {
companion object : KBaseColumns() {
val TABLE_NAME = "users"
val COLUMN_DISPLAY_NAME = "display_name"
val COLUMN_EMAIL = "email"
}
}
}
object Example {
fun someMethod() {
val id = UserContract.UserEntry._ID
}
}
在这种情况下 _ID
是可访问的,因为伴随对象实际上是 KBaseColumns
关于android - 无法访问 BaseColumns 在 Kotlin 中提供了 _ID 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347113/