Не удается получить доступ к BaseColumns, предоставляет свойство _ID в Котлине

Я определяю таблицу базы данных 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" //... } } } 

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить доступ к свойству _ID, предоставленному в результате реализации BaseColums:

 val columnDisplayName = UserContract.UserEntry.COLUMN_DISPLAY_NAME //It is OK val columnId = UserContract.UserEntry._ID //Unresolved reference: _ID 

Эквивалентный код в 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 } } 

Где _ID доступен в этом случае, потому что сопутствующий объект фактически является подклассом KBaseColumns