Das erste Beispiel (mit const-Feld) kann für Attribute verwendet werden. Beliebter Fall: Deklarieren Sie alle Web-API-Pfade in der einzelnen Datei und verweisen Sie von Controllern mit folgendem Code darauf: "@RequestMapping (path = arrayOf (WebPathConstants.MapApiPath))" (Spring Boot-Attribut)
Manushin Igor
Hallo Leute! Wissen Sie, ob dieses @JvmField noch notwendig ist? Ich benutze dies in Android und es zeigt eine Flusenwarnung, die besagt, dass stattdessen "const" verwendet werden kann. Ich habe es in const geändert und die Java-Klasse, die es verwendet, hat keine Probleme.
Leandro Ocampo
1
@LeandroOcampo ist es immer noch erforderlich, wenn Sie ein veränderbares statisches Feld haben, 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/…
Ruslan
36
Wenn Sie eine Implementierung in haben Hello, verwenden Sie diese companion objectinnerhalb einer Klasse
classHello{
companion object{
val MAX_LEN =1+1}}
if Helloist ein reines Singleton-Objekt
objectHello{
val MAX_LEN =1+1}
Wenn es sich bei den Eigenschaften um Konstanten zur Kompilierungszeit handelt, fügen Sie ein constSchlüsselwort hinzu
objectHello{const val MAX_LEN =20}
Wenn Sie es in Java verwenden möchten, fügen Sie eine @JvmStaticAnmerkung hinzu
In den Fällen, in denen die Konstante nicht außerhalb der Datei verfügbar gemacht werden muss (z. B. Java private), ist diese Definition am präzisesten.
Antworten:
Laut Kotlin- Dokumentation ist dies äquivalent:
Verwendung:
Dies ist auch eine statische endgültige Eigenschaft (Feld mit Getter):
Und schließlich ist dies das statische Endfeld:
quelle
const val
- die Zeitkonstante kompilieren und es@JvmField val
in 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 diesecompanion object
innerhalb einer Klasseif
Hello
ist ein reines Singleton-ObjektWenn es sich bei den Eigenschaften um Konstanten zur Kompilierungszeit handelt, fügen Sie ein
const
Schlüsselwort hinzuWenn Sie es in Java verwenden möchten, fügen Sie eine
@JvmStatic
Anmerkung hinzuquelle
Für mich
war zu viel Boilerplate. Ich setze die statischen Endfelder einfach so über meine Klasse
quelle
private
), ist diese Definition am präzisesten.