无法访问BaseColumns在Kotlin中提供了_ID属性
我正在定义我的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中的等效代码工作正常,所以,有没有人知道是什么原因或错误是什么?
您只能使用BaseColumns._ID
访问它,因为它是定义常量的Java接口。
在Kotlin上,伴侣对象是具有inheritance的实际对象,而在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
的子类