Respostas:
De acordo com a documentação da Kotlin , isso é equivalente:
class Hello {
companion object {
const val MAX_LEN = 20
}
}
Uso:
fun main(srgs: Array<String>) {
println(Hello.MAX_LEN)
}
Também é uma propriedade final estática (campo com getter):
class Hello {
companion object {
@JvmStatic val MAX_LEN = 20
}
}
E, finalmente, este é o campo final estático:
class Hello {
companion object {
@JvmField val MAX_LEN = 20
}
}
const val
- compile o tempo constante e, com certeza, ele poderá ser usado como substituto @JvmField val
em alguns casos. Através dele, não funciona se o valor - calculado em tempo de execução, ou não é do tipo primitivo ou String. Ref: kotlinlang.org/docs/reference/...
se você tem uma implementação Hello
, use companion object
dentro de uma classe
class Hello {
companion object {
val MAX_LEN = 1 + 1
}
}
if Hello
é um objeto singleton puro
object Hello {
val MAX_LEN = 1 + 1
}
se as propriedades forem constantes em tempo de compilação, adicione uma const
palavra - chave
object Hello {
const val MAX_LEN = 20
}
se você quiser usá-lo em Java, adicione @JvmStatic
anotação
object Hello {
@JvmStatic val MAX_LEN = 20
}
Para mim
object Hello {
const val MAX_LEN = 20
}
foi muito clichê. Simplesmente coloquei os campos finais estáticos acima da minha classe assim
val MIN_LENGTH = 10
class MyService{
}
private
), essa definição é a mais concisa.