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

  • Base de datos de android de Kotlin: no se puede convertir java.lang.String en android.database.Cursor
  • Cómo anotar una columna como NOT NULL utilizando Android Room Persistence Library
  • Tipo de interferencia fallida. No coinciden los types esperados: requiere un par de cadenas encontrado <String, String> en Kotlin y Anko
  • Agregar / Consultar / Analizar SQLite usando Anko
  • Por qué las entidades Room no funcionan con properties inmutables en Android