Ale*_*xTa 5 sqlite android kotlin
我正在定义我的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"
//...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我无法访问BaseColums实现提供的_ID属性:
val columnDisplayName = UserContract.UserEntry.COLUMN_DISPLAY_NAME //It is OK
val columnId = UserContract.UserEntry._ID //Unresolved reference: _ID
Run Code Online (Sandbox Code Playgroud)
Java中的等效代码工作得很好,那么,是否有人知道原因是什么或错误在哪里?
您只能使用它来访问它,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
}
}
Run Code Online (Sandbox Code Playgroud)
其中_ID在这种情况下访问,因为同伴的对象实际上是一个子类KBaseColumns
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |