我正在定义我的Users 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中的等效代码工作正常,那么,是否有人知道原因是什么或错误在哪里?
答案 0 :(得分:7)
您只能使用BaseColumns._ID
访问它,因为它是定义常量的Java接口。
在Kotlin上,伴随对象是具有继承的实际对象,而在java中,具有静态方法的类实际上并不像对象。
例如,如果你有BaseColumns
作为kotlin类而不是java接口,你可以做类似的事情:
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
的子类