Что эквивалентно статическим конечным полям Java в Котлине?

В Java, чтобы объявить константу, вы делаете что-то вроде:

class Hello  {
 public static final int MAX_LEN = 20;
}

Что эквивалентно в Котлине?

Ответ 1

Согласно документации Котлина, это эквивалентно:

class Hello {
    companion object {
        const val MAX_LEN = 20
    }
}

Применение:

fun main(srgs: Array<String>) {
    println(Hello.MAX_LEN)
}

Также это статическое конечное свойство (поле с геттером):

class Hello {
    companion object {
        @JvmStatic val MAX_LEN = 20
    }
}

И, наконец, это статическое конечное поле:

class Hello {
    companion object {
        @JvmField val MAX_LEN = 20
    }
}

Ответ 2

если у вас есть реализация в Hello, используйте companion object внутри класса

class Hello {
  companion object {
    val MAX_LEN = 1 + 1
  }

}

если Hello - это чистый одноэлементный объект

object Hello {
  val MAX_LEN = 1 + 1
}

если свойства являются константами времени компиляции, добавьте ключевое слово const

object Hello {
  const val MAX_LEN = 20
}

если вы хотите использовать его в Java, добавьте аннотацию @JvmStatic

object Hello {
  @JvmStatic val MAX_LEN = 20
}

Ответ 3

Для меня

object Hello {
   const val MAX_LEN = 20
}

было много шаблонов. Я просто поставил статические конечные поля над моим классом, как это

val MIN_LENGTH = 10

class MyService{
}