Pierwszy przykład (z polem const) może być użyty dla atrybutów. Popularny przypadek: zadeklaruj wszystkie ścieżki interfejsu API sieci Web w jednym pliku i odwołaj się do niego z kontrolerów za pomocą takiego kodu: „@RequestMapping (path = arrayOf (WebPathConstants.MapApiPath))” (atrybut Spring Boot)
Manushin Igor
Cześć chłopaki! Czy wiesz, czy to @JvmField jest nadal konieczne? Używam tego w Androidzie i wyświetla ostrzeżenie o kłaczkach, mówiąc, że zamiast tego można użyć „const”. Zmieniłem go na const, a klasa java, która go używa, nie ma żadnych problemów.
Leandro Ocampo
1
@LeandroOcampo jest to nadal konieczne w przypadku, gdy masz zmienne pole statyczne, const val- kompiluj stałą czasową i na pewno może być używana jako zamiennik @JvmField valw 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/…
Ruslan
36
jeśli masz implementację w Hello, użyj companion objectwewnątrz klasy
classHello{
companion object{
val MAX_LEN =1+1}}
if Hellojest czystym obiektem singletonowym
objectHello{
val MAX_LEN =1+1}
jeśli właściwości są stałymi czasu kompilacji, dodaj constsłowo kluczowe
objectHello{const val MAX_LEN =20}
jeśli chcesz go używać w Javie, dodaj @JvmStaticadnotację
Odpowiedzi:
Według dokumentacji Kotlin jest to równoważne:
Stosowanie:
Jest to również statyczna właściwość końcowa (pole z funkcją pobierającą):
I wreszcie to jest statyczne pole końcowe:
źródło
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żyjcompanion object
wewnątrz klasyif
Hello
jest czystym obiektem singletonowymjeśli właściwości są stałymi czasu kompilacji, dodaj
const
słowo kluczowejeśli chcesz go używać w Javie, dodaj
@JvmStatic
adnotacjęźródło
Dla mnie
było za dużo schematu. Po prostu umieszczam statyczne pola końcowe nad moją klasą w ten sposób
źródło
private
), ta definicja jest najbardziej zwięzła.