【问题标题】:Accessing constants defined in Kotlin in java class在 Java 类中访问 Kotlin 中定义的常量
【发布时间】:2018-12-18 07:47:54
【问题描述】:

我在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。我明白了 错误,它具有私有访问权限。
  • 如何解决这个问题。我是否需要以不同方式声明常量 在 kotlin 中。

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    您可以使用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;
    

    第二种方式

    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
    }
    

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

    Keys.SPLASH_DURATION;
    

    【讨论】:

      【解决方案2】:

      如何解决:

      添加@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

      【讨论】:

        【解决方案3】:

        您可以像上面的截图一样创建一个常量文件

        并像这样定义您的常量值,而无需创建任何伴随对象并在您的项目中访问它。

        你的常数值:-

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-28
          • 2020-09-11
          • 1970-01-01
          • 2011-01-26
          • 1970-01-01
          • 2010-10-03
          • 1970-01-01
          相关资源
          最近更新 更多