No se puede acceder a BaseColumns proporciona la propiedad _ID en Kotlin

Estoy definiendo la tabla de database SQLite de mis usuarios, y para hacerlo, he creado las siguientes classs UserContract y 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" //... } } } 

El problema al que me enfrento es que no puedo acceder a la propiedad _ID proporcionada por la implementación de BaseColums:

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

El código equivalente en Java funciona bien, entonces, ¿alguien sabe cuál sería la razón o dónde está el error?

¡Gracias por adelantado!

Solo se puede acceder utilizando BaseColumns._ID dado que es una interfaz Java que define una constante.

En Kotlin, un object complementario es un object real con inheritance, mientras que en Java una class con methods estáticos no se comporta realmente como un object.

Por ejemplo, si tuviera BaseColumns como una class de kotlin en lugar de una interfaz de Java, podría haber hecho algo como:

 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 } } 

Donde _ID es accesible en este caso porque el object complementario es en realidad una subclass de KBaseColumns

  • Imposible get datos de la database sqlite
  • Agregar / Consultar / Analizar SQLite usando Anko
  • IlegalStateException donde se lanzó, al intentar recuperar los valores de la instancia de RoomDatabase
  • Android (Kotlin): sobrescribe el nombre para la input del logging de llamadas
  • Error de la database de la sala Android: parámetro no utilizado: días en la function @Query