访问Java类中Kotlin中定义的常量

时间:2018-12-18 07:47:54

标签: android kotlin

我已经在kotlin中定义了一些常量

object Keys {
    const val SPLASH_DURATION : Long = 5000

    const val READ_TIMEOUT : Int = 200
    const val CONNECTION_TIMEOUT : Int = 200
    const val WRITE_TIMEOUT : Int = 200

    var BASE_URL = BuildConfig.SERVER_KEY
}
  • 如果我尝试以Keys.BASE_URL的形式访问Java类中的BASE_URL。我懂了 错误,它具有私有访问权限。
  • 如何解决此问题。我是否需要以其他方式声明常量 在科特林。

3 个答案:

答案 0 :(得分:3)

您可以使用Companion Objects

  • 可以使用companion关键字标记类内的对象声明:

尝试这种方式

class Keys {

    companion object {
        const val SPLASH_DURATION : Long = 5000
        const val READ_TIMEOUT : Int = 200
        const val CONNECTION_TIMEOUT : Int = 200
        const val WRITE_TIMEOUT : Int = 200

    }
}

现在您可以像这样访问const变量

Keys.CONNECTION_TIMEOUT;

答案 1 :(得分:0)

如何解决:

添加@JvmField

示例:

object Keys {
    const val SPLASH_DURATION : Long = 5000

    const val READ_TIMEOUT : Int = 200
    const val CONNECTION_TIMEOUT : Int = 200
    const val WRITE_TIMEOUT : Int = 200

    @JvmField
    var BASE_URL = BuildConfig.SERVER_KEY
}

为什么

  1. 在对象的公共字段上使用@JvmField批注,以告知编译器不要生成任何getter或setter
  2. 将其公开为类中的静态字段

See the kotlin documentation

答案 2 :(得分:0)

enter image description here

您可以只创建一个常量文件,如上面的屏幕截图一样。

并像这样定义常量值,而无需创建任何伴随对象,并在整个项目中对其进行访问。

您的常量值:-

const val SPLASH_DURATION : Long = 5000
const val READ_TIMEOUT : Int = 200
const val CONNECTION_TIMEOUT : Int = 200
const val WRITE_TIMEOUT : Int = 200

如果您要制作伴侣对象,还可以在 KOTLIN

中进行

例如-

 class Keys {

   companion object {

       const val SPLASH_DURATION : Long = 5000
        const val READ_TIMEOUT : Int = 200
        const val CONNECTION_TIMEOUT : Int = 200
        const val WRITE_TIMEOUT : Int = 200

    }
}

并以这种方式获取它-

Keys.READ_TIMEOUT