我正在尝试使用Kotlin重写我的Android应用程序,并且在转换ContentProvider合同类时遇到了问题。 因此,我有一个简单的合同类(默认内容类型和内容URI之类的东西被省略):
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 中?
更新 我认为我应该澄清一下——我的调用者代码也是在 Kotlin 中。 问题出在 @JvmField 注释上。有了它,我可以直接访问静态成员,而不必调用 getter。
BirthdayContract
粘贴到了一个新的 Kotlin 文件中,并删除了其中的: BaseColumns
,因为它会导致编译错误。我还创建了一个函数来访问BirthdayContract.Contacts.NAME
。我认为您需要提供更多信息和/或更新的示例,以便演示您所遇到的问题。谢谢。 - mfulton26