无法访问BaseColumns在Kotlin中提供_ID属性

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中的等效代码工作得很好,那么,是否有人知道原因是什么或错误在哪里?

Log*_*ain 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
    }
}
Run Code Online (Sandbox Code Playgroud)

其中_ID在这种情况下访问,因为同伴的对象实际上是一个子类KBaseColumns