java – Kotlin for android和static final inner classes

前端之家收集整理的这篇文章主要介绍了java – Kotlin for android和static final inner classes前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在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.

解决方法

NAME是一个属性,默认情况下,其支持字段具有私有访问权限.但由于它是一个属性,它有一个吸气剂:getNAME().

由于这不是您如何自然地访问Java中的常量,因此有几种方法可以直接显示该字段:

> const:const val NAME =“Name”
> @JvmField注释:@JvmField val NAME =“Name”

猜你在找的Android相关文章