【发布时间】:2016-12-02 01:37:57
【问题描述】:
我正在尝试在 Kotlin 上重写我的 android 应用程序,但在转换 ContentProvider 合同类时遇到了问题。 所以我有简单的合同类(内容类型和内容 uris 等默认内容被省略):
public final class Contract {
public static final class Contacts {
public static final String NAME = "Name"
public static final String BIRTH = "Birth"
public static final String IMAGE = "Image"
}
}
如果我理解正确,在 Kotlin 中我们没有静态成员。取而代之的是,我们有“伴侣对象”。所以在将它转换为 Kotlin 之后,我有这个代码:
object BirthdayContract {
class Contacts : BaseColumns {
companion object {
val NAME = "Name"
val BIRTH = "Birth"
val IMAGE = "Image"
}
}
}
但是,当我尝试访问 Contract.Contacts.NAME 等字段时,出现错误:“NAME 具有私人访问权限”。更改可见性修改器没有效果。 那么有没有办法在 Kotlin 中使用这样的契约类,或者最好将其保留在 Java 中?
UPD 我想我应该澄清一下——我的调用者代码也在 Kotlin 中。 问题出在@JvmField 注释中。有了它,我可以直接访问静态成员,而无需调用 getter。
【问题讨论】:
-
请提供MCVE。我将您的
BirthdayContract粘贴到一个新的 Kotlin 文件中,删除了 `:BaseColumns`,因为它不能使用它进行编译,并创建了一个访问BirthdayContract.Contacts.NAME的函数。我相信您需要提供更多信息和/或更新的示例来编译和演示您所看到的问题。谢谢。 -
@mfulton26 我做了同样的事情——创建了新的 .kt 文件,并在里面复制了我的 Kotlin 代码。它编译没有错误。 BaseColumns 界面没有问题。你有什么样的错误?