Ответы:
Согласно документации Kotlin, это эквивалентно:
class Hello {
companion object {
const val MAX_LEN = 20
}
}
Использование:
fun main(srgs: Array<String>) {
println(Hello.MAX_LEN)
}
Также это статическое свойство final (поле с геттером):
class Hello {
companion object {
@JvmStatic val MAX_LEN = 20
}
}
И наконец, это статическое финальное поле:
class Hello {
companion object {
@JvmField val MAX_LEN = 20
}
}
const val
- константа времени компиляции и наверняка может использоваться в качестве замены @JvmField val
в некоторых случаях. Через него не работает, если значение - вычисленное во время выполнения, или это не примитивный тип или String. Ссылка: kotlinlang.org/docs/reference/…
если у вас есть реализация 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
}
Для меня
object Hello {
const val MAX_LEN = 20
}
был слишком шаблонным. Я просто помещаю статические конечные поля над моим классом следующим образом
val MIN_LENGTH = 10
class MyService{
}
private
), это определение является наиболее кратким.