gpt4 book ai didi

android - 无法访问 BaseColumns 在 Kotlin 中提供了 _ID 属性

转载 作者:IT老高 更新时间:2023-10-28 13:47:33 26 4
gpt4 key购买 nike

我正在定义我的用户 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"
//...
}
}
}

我面临的问题是我无法访问 BaseColums 实现提供的 _ID 属性:

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

Java 中的等效代码运行良好,那么,有谁知道是什么原因或错误在哪里?

最佳答案

您只能使用 BaseColumns._ID 访问它,因为它是一个定义常量的 Java 接口(interface)。

在 Kotlin 中,伴生对象是具有继承性的实际对象,而在 java 中,具有静态方法的类的行为并不像对象。

例如,如果您将 BaseColumns 作为 kotlin 类而不是 java 接口(interface),则可以执行以下操作:

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

的子类

关于android - 无法访问 BaseColumns 在 Kotlin 中提供了 _ID 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com