Доступ к константам, определенным в Kotlin, в классе Java

Я определил некоторые константы в котлине

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
}
  • Если я попытаюсь получить доступ к BASE_URL в классе Java как Keys.BASE_URL. я получил ошибка, у него есть частный доступ.
  • Как решить эту проблему. Следует ли мне по-другому объявлять константы в котлине.
3
0
2 600
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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;

Second Way

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;

Как решить:

Добавьте @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 в общедоступном поле в объекте, чтобы сообщить компилятору, чтобы он не создавал никаких геттеров или сеттеров.
  2. Выставить его как статическое поле в классе

См. Документацию kotlin

Вы можете просто создать один файл констант, как на скриншоте выше.

И определите свое постоянное значение таким образом, не создавая никаких сопутствующих объектов, и получите к нему доступ через свои проекты.

ваши постоянные значения: -

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

И если вы хотите создать объект-компаньон, вы также можете сделать это в КОТЛИН

для например -

 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

Другие вопросы по теме