Antworten:
Laut Kotlin- Dokumentation ist dies äquivalent:
class Hello {
companion object {
const val MAX_LEN = 20
}
}
Verwendung:
fun main(srgs: Array<String>) {
println(Hello.MAX_LEN)
}
Dies ist auch eine statische endgültige Eigenschaft (Feld mit Getter):
class Hello {
companion object {
@JvmStatic val MAX_LEN = 20
}
}
Und schließlich ist dies das statische Endfeld:
class Hello {
companion object {
@JvmField val MAX_LEN = 20
}
}
const val- die Zeitkonstante kompilieren und es @JvmField valin einigen Fällen sicher als Ersatz verwenden kann . Durch es funktioniert nicht, wenn Wert - in der Laufzeit berechnet, oder es nicht primitiven Typ oder String. Ref: kotlinlang.org/docs/reference/…
Wenn Sie eine Implementierung in haben Hello, verwenden Sie diese companion objectinnerhalb einer Klasse
class Hello {
companion object {
val MAX_LEN = 1 + 1
}
}
if Helloist ein reines Singleton-Objekt
object Hello {
val MAX_LEN = 1 + 1
}
Wenn es sich bei den Eigenschaften um Konstanten zur Kompilierungszeit handelt, fügen Sie ein constSchlüsselwort hinzu
object Hello {
const val MAX_LEN = 20
}
Wenn Sie es in Java verwenden möchten, fügen Sie eine @JvmStaticAnmerkung hinzu
object Hello {
@JvmStatic val MAX_LEN = 20
}
Für mich
object Hello {
const val MAX_LEN = 20
}
war zu viel Boilerplate. Ich setze die statischen Endfelder einfach so über meine Klasse
val MIN_LENGTH = 10
class MyService{
}
private), ist diese Definition am präzisesten.