web-dev-qa-db-fra.com

Quel est l'équivalent de Java champs finaux statiques dans Kotlin?

En Java, pour déclarer une constante, vous faites quelque chose comme:

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

Quel est l'équivalent à Kotlin?

93
pdeva

Selon Kotlin documentation c'est équivalent:

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

Usage:

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

Aussi c'est une propriété finale statique (champ avec getter):

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

Et enfin c'est le champ final statique:

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

si vous avez une implémentation dans Hello, utilisez _companion object_ dans une classe

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

}
_

si Hello est un objet singleton pur

_object Hello {
  val MAX_LEN = 1 + 1
}
_

si les propriétés sont des constantes à la compilation, ajoutez un mot clé const

_object Hello {
  const val MAX_LEN = 20
}
_

si vous voulez l'utiliser en Java, ajoutez @JvmStatic annotation

_object Hello {
  @JvmStatic val MAX_LEN = 20
}
_
28
Gary LO

Pour moi

object Hello {
   const val MAX_LEN = 20
}

était trop chaud. Je mets simplement les champs finaux statiques au dessus de ma classe comme ceci

val MIN_LENGTH = 10

class MyService{
}
8
Simon Ludwig