Kotlin'deki Java statik final alanlarının karşılığı nedir?


132

Java'da bir sabit beyan etmek için aşağıdaki gibi bir şey yaparsınız:

class Hello {
    public static final int MAX_LEN = 20;
}

Kotlin'deki karşılığı nedir?


1
Yana val Kotlin connotes içinde salt okunur, bu yeterli olmaz?
IgorGanapolsky

Yanıtlar:


213

Kotlin belgelerine göre bu eşdeğerdir:

class Hello {
    companion object {
        const val MAX_LEN = 20
    }
}

Kullanımı:

fun main(srgs: Array<String>) {
    println(Hello.MAX_LEN)
}

Ayrıca bu statik son özelliktir (alıcılı alan):

class Hello {
    companion object {
        @JvmStatic val MAX_LEN = 20
    }
}

Ve son olarak bu statik son alandır:

class Hello {
    companion object {
        @JvmField val MAX_LEN = 20
    }
}

İlk örnek (const alanıyla) öznitelikler için kullanılabilir. Popüler durum: tek dosyadaki tüm web api yollarını bildirin ve şu kodla denetleyicilerden referans verin: "@RequestMapping (path = arrayOf (WebPathConstants.MapApiPath))" (Spring Boot özniteliği)
Manushin Igor

Merhaba millet! Bu @JvmField'ın hala gerekli olup olmadığını biliyor musunuz? Bunu android'de kullanıyorum ve bunun yerine "const" kullanılabileceğini söyleyen tüysüz bir uyarı gösteriyor. Bunu const olarak değiştirdim ve onu kullanan java sınıfında herhangi bir sorun yok.
Leandro Ocampo

1
@LeandroOcampo, değişken bir statik alanınız varsa, const val- zaman sabitini derleyin ve @JvmField valbazı durumlarda bunun yerine kesinlikle kullanılabilir . Değer - çalışma zamanında hesaplanırsa veya ilkel tür veya Dize değilse, bununla çalışmaz. Ref: kotlinlang.org/docs/reference/…
Ruslan

36

içinde bir uygulamanız varsa Hello, companion objectbir sınıf içinde kullanın

class Hello {
  companion object {
    val MAX_LEN = 1 + 1
  }

}

Eğer Hellosaf tek nesnedir

object Hello {
  val MAX_LEN = 1 + 1
}

özellikler derleme zamanı sabitleriyse, bir constanahtar kelime ekleyin

object Hello {
  const val MAX_LEN = 20
}

Java'da kullanmak istiyorsanız, @JvmStaticaçıklama ekleyin

object Hello {
  @JvmStatic val MAX_LEN = 20
}

1
en iyi cevap
rcorbellini

9

Benim için

object Hello {
   const val MAX_LEN = 20
}

çok standart bir şeydi. Statik son alanları şu şekilde sınıfımın üzerine koyarım

val MIN_LENGTH = 10

class MyService{
}

2
Sabitin dosyanın dışında açığa çıkarılmasına ihtiyaç duymadığınız durumlarda (yani java'lar private), bu tanım en kısa olanıdır.
javaxian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.