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

  • Implementación de SQLite en Kotlin y Anko
  • Base de datos de android de Kotlin: no se puede convertir java.lang.String en android.database.Cursor
  • ¿Cómo puedo unirme a tres entidades en GreenDao?
  • Tipo de interferencia fallida. No coinciden los types esperados: requiere un par de cadenas encontrado <String, String> en Kotlin y Anko
  • Error al hacer que Enum sea la key principal en la biblioteca de la database de la sala