Котлин. Как объявить константу?

У меня есть класс, который в первичном конструкторе имеет несколько полей:

      class SomeData(val counter: Int...) { // some logic}

Мне нужно создать константу. Я обычно делаю так:

       companion object {
     private const val MAX_VALUE = 1000
 }

Но в моем случае для объявления константы мне нужно использовать поле из класса. Но для доступа к полю counterиз SomeDataclass Мне нужно создать экземпляр этого класса, а затем получить доступ к полю.

Это нормальная практика делать что-то подобное?

Или лучше объявить эту константу внутри класса:

      private val MAX_VALUE = counter/ 2

Но в этом случае Android Studio предупреждает меня:

Имя частного свойства "MAX_VALUE" не должно содержать символы подчеркивания в середине или конце.

Как объявить константу?

3 ответа

Если твой MAX_VALUEосновывается на других данных в объекте, то по определению не является константой.

Вместо этого вам нужно свойство только для чтения. Есть два простых способа создать это:

Во-первых, что вы уже сделали:

      class SomeData(val counter: Int...) {

    private val maxValue = counter / 2

    // some logic
}

Обратите внимание, что в названии используется верблюжий, а не верхний змеиный регистр.

Во-вторых, если вы хотите быть немного более подробным, вы можете использовать явный геттер:

      class SomeData(val counter: Int...) {

    private val maxValue: String
        get() = counter / 2

    // some logic
}

Вторая форма также означает, что если бы вы были изменчивым var(вместо неизменного val), то maxValueтакже изменится, когда counterизменения.

Константа - это значение по умолчанию, которое никогда не менялось во время выполнения и никогда не зависело динамически ни от какого другого значения. Вы можете создать, как показано ниже

companion object { private const val CONSTAN_NAME = "value" }

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

создайте файл Constants и внутри этого файла просто создайте константы, например

      const val DATABASE_NAME = "database-xyz"

и если вы создадите объект-компаньон, то это не очень хорошая практика, так как он также создаст экземпляр этого класса и получит ресурсы, пока вы не уничтожите его после использования.

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