Odpowiedzi:
Według dokumentacji Kotlin jest to równoważne:
class Hello {
companion object {
const val MAX_LEN = 20
}
}
Stosowanie:
fun main(srgs: Array<String>) {
println(Hello.MAX_LEN)
}
Jest to również statyczna właściwość końcowa (pole z funkcją pobierającą):
class Hello {
companion object {
@JvmStatic val MAX_LEN = 20
}
}
I wreszcie to jest statyczne pole końcowe:
class Hello {
companion object {
@JvmField val MAX_LEN = 20
}
}
const val
- kompiluj stałą czasową i na pewno może być używana jako zamiennik @JvmField val
w niektórych przypadkach. Dzięki temu nie działa, jeśli wartość jest obliczana w czasie wykonywania lub nie jest typem pierwotnym lub ciągiem. Ref: kotlinlang.org/docs/reference/…
jeśli masz implementację w Hello
, użyj companion object
wewnątrz klasy
class Hello {
companion object {
val MAX_LEN = 1 + 1
}
}
if Hello
jest czystym obiektem singletonowym
object Hello {
val MAX_LEN = 1 + 1
}
jeśli właściwości są stałymi czasu kompilacji, dodaj const
słowo kluczowe
object Hello {
const val MAX_LEN = 20
}
jeśli chcesz go używać w Javie, dodaj @JvmStatic
adnotację
object Hello {
@JvmStatic val MAX_LEN = 20
}
Dla mnie
object Hello {
const val MAX_LEN = 20
}
było za dużo schematu. Po prostu umieszczam statyczne pola końcowe nad moją klasą w ten sposób
val MIN_LENGTH = 10
class MyService{
}
private
), ta definicja jest najbardziej zwięzła.