无法访问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的子类