Les constantes de Kotlin — ce qui est une méthode recommandée pour les créer?
Comment est-il recommandé de créer des constantes dans Kotlin? Et quelle est la convention de nommage? Je n'ai pas trouvé que dans la documentation.
companion object {
//1
val MY_CONST = "something"
//2
const val MY_CONST = "something"
//3
val myConst = "something"
}
Ou ...?
- Si vous voulez quelque chose de correspondant à un
public static final
champ en Java, l'utilisationconst val
dans votre compagnon objet. Si vous voulez unprivate static final
champ et un public de lecture, utilisezval
dans votre compagnon objet. - Voici le blog qui explique les façons de définir des constantes dans Kotlin: blog.egorand.moi/where-do-i-mettre-mes-les constantes-en-kotlin
- Checkout cet article. Il donne un bon aperçu des différentes façons dans lequel vous pouvez stocker vos constantes, avec des performances liées à des arbitrages.
Vous devez vous connecter pour publier un commentaire.
Dans Kotlin, si vous souhaitez créer les constantes locales qui sont censés être utilisés dans la classe puis vous pouvez le créer comme ci-dessous
Et si vous voulez créer une constante publique dans kotlin comme public static final en java, vous pouvez le créer suivre.
Constants.kt
ou comment?companion object
je pense que @piotrpo réponse devrait être accepté par unMY_CONSTANT
dans le champ de la classe n'est pas une bonne idée - compilateur signale avec message "propriété Privée" nom de l'MY_CONSTANT' ne doit pas contenir de caractères de soulignement dans le milieu ou à la fin". Il rompt recommandé de nommage de la convection.Éviter d'utiliser compagnon objets. Sous le capot, de lecture et de définition des méthodes d'instance sont créés pour les champs pour être accessible. L'appel de méthodes d'instance est techniquement plus cher que d'appeler des méthodes statiques.
Au lieu de définir les constantes dans
object
.Pratique recommandée :
et d'accéder à l'échelle mondiale, comme ceci:
DbConstants.TABLE_USER_ATTRIBUTE_EMPID
const val
dans un compagnon objet tout différent d'unconst val
dans un objet ordinaire (c'est à dire la seule différence entre vos exemples me semble que vous avez omisconst
dans le compagnon objet de cas - si vous ajoutezconst
, les exemples doivent avoir les mêmes performances)const val
s, la déclaration d'unecompanion object
est correct.Des valeurs connues au moment de la compilation peut (et à mon avis devrait) être marqué comme constante.
Conventions de nommage doit suivre Java et doit être bien visible lorsque utilisé à partir du code Java (c'est un peu dur à atteindre avec le compagnon des objets, mais de toute façon).
Le bon déclarations de constantes sont:
Naming conventions should follow Java ones
- pourquoi?If in doubt, default to the Java Coding Conventions
Vous n'avez pas besoin d'une classe, d'un objet ou d'un compagnon de l'objet pour déclarer des constantes dans Kotlin. Vous pouvez simplement déclarer un fichier contenant toutes les constantes (par exemple Constantes.kt) et de déclarer directement les constantes à l'intérieur du fichier. Les constantes connues au moment de la compilation doit être marqué avec
const
.Donc, dans ce cas, il convient de:
const val MY_CONST = "something"
et vous pouvez ensuite importer de la constante à l'aide de:
import package_name.MY_CONST
Vous pouvez vous référer à ce lien
Tout d'abord, la convention de nommage dans Kotlin pour les constantes est le même qu'en java (e.g : MY_CONST_IN_UPPERCASE).
Comment dois-je le créer ?
1. Un haut niveau de valeur (recommandée)
Vous avez juste à mettre votre const à l'extérieur votre déclaration de classe.
Deux possibilités : Déclarer votre const dans votre fichier de classe (votre const ont une relation évidente avec votre classe)
Créer un dédié constantes.kt fichier où stocker ces constantes globales (Ici vous souhaitez utiliser votre const largement l'ensemble de votre projet) :
Ensuite vous avez juste à importer où vous en avez besoin :
2. Il déclare dans un compagnon de l'objet (ou d'un objet de la déclaration)
C'est beaucoup moins plus propre, car sous le capot, lorsque le bytecode généré, inutile de l'objet est créée :
Encore pire si vous le déclare comme val, au lieu de const (compilateur va générer un inutile d'objet + une fonction inutile) :
Remarque :
Dans kotlin, const suffit de les tenir types primitifs. Si vous voulez passer une fonction, vous devez ajouter l' @JvmField annotation. Au moment de la compilation, il se transformera en tant que public static final variable. Mais c'est plus lent qu'avec un type primitif. Essayez de l'éviter.
Si vous mettez votre
const val valName = valValue
avant le nom de la classe, de cette manière, il se crée unepublic static final YourClass.Kt
qui auront lepublic static final
valeurs.Kotlin:
Java décompilé:
vous avez deux choix, vous pouvez utiliser
const
mot-clé ou utiliser le@JvmField
qui en fait une java static final constante.Si vous utilisez le
@JvmField
annotation puis, après, il compile la constante est mis en pour vous la façon dont vous voulez l'appeler, dans java.Comme vous l'appeler en java, le compilateur remplace que pour vous lorsque vous appelez le compagnon constant dans le code.
Toutefois, si vous utilisez le mot-clé const alors la valeur de la constante obtient inline. Par inline je veux dire la valeur réelle est utilisée après qu'il compile.
donc, pour résumer voici ce que le compilateur fera pour vous :
Quelque chose qui n'est pas mentionnée dans l'une des réponses est la surcharge de l'aide
companion objects
. Comme vous pouvez le lire ici de compagnie, les objets sont en fait des objets et de les créer consomme des ressources. En outre, vous devrez peut-être passer par plus d'un getter de la fonction à chaque fois que vous utilisez votre constante. Si tout que vous avez besoin est un peu primitif des constantes que vous aurez probablement juste être mieux à l'aide deval
pour obtenir un de meilleures performances et d'éviter lacompanion object
.TL;DR; de l'article:
À l'aide de compagnon de l'objet s'avère en fait ce code
Dans ce code:
Donc, essayez de les éviter.
constantes locales:
Constantes globales:
accès MyConstants.NOM
Pour les primitives et les Chaînes de caractères:
Pour les autres cas:
Exemple:
Il existe quelques façons dont vous pouvez définir des constantes dans Kotlin,
À l'aide de compagnon objet
vous pouvez utiliser au-dessus de compagnon objet de bloc à l'intérieur de toute classe et de définir tous les champs à l'intérieur de ce bloc lui-même. Mais il y a un problème avec cette approche, la documentation dit,
Lorsque vous créez votre constantes à l'aide de compagnon de l'objet, et de voir le décompilé bytecode, vous aurez quelque chose comme ci-dessous,
À partir d'ici vous pouvez facilement voir ce que la documentation dit, , même si les membres de compagnon objets ressemblent à des membres statiques dans d'autres langues, à l'exécution, ceux qui sont encore membres de l'instance de l'objet réel C'est de faire du travail supplémentaire que nécessaire.
Maintenant vient une autre façon, où nous n'avons pas besoin d'utiliser compagnon objet comme ci-dessous,
De nouveau si vous voyez le décompilé version de l'octet code de l'extrait ci-dessus, vous trouverez quelque chose comme cela,
Maintenant, si vous voyez ci-dessus le code decompile, c'est la création de la méthode get pour chaque variable. Cette méthode get n'est pas nécessaire à tous.
Pour se débarrasser de ces méthodes get, vous devez utiliser const avant val comme ci-dessous,
Maintenant, si vous voyez le code décompilé de l'extrait ci-dessus, vous le trouverez plus facile à lire car il fait le moins de conversion en arrière-plan pour votre code.
Donc, c'est le meilleur moyen de créer des constantes.