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

  • Agregar / Consultar / Analizar SQLite usando Anko
  • Implementación de SQLite en Kotlin y Anko
  • Seleccionar datos de dos tablas en Kotlin Anko
  • ¿Cómo unir dos tablas en Android usando el método de consulta del proveedor de contenido?
  • Error de la database de la sala Android: parámetro no utilizado: días en la function @Query