Доступ к константам, определенным в Kotlin в классе Java - PullRequest
0 голосов
/ 18 декабря 2018

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

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Как решить:

Добавить @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

0 голосов
/ 18 декабря 2018

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
0 голосов
/ 18 декабря 2018

Вы можете использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...