Que signifie un seul point d'exclamation en Kotlin? Je l'ai vu à quelques reprises, en particulier lors de l'utilisation d'API Java. Mais je ne l'ai pas trouvé dans la documentation ni sur StackOverflow.
Ils sont appelés types de plates-formes et signifient que Kotlin ne sait pas si cette valeur peut ou ne peut pas l'être null
et c'est à vous de décider si elle peut être annulée ou non.
En un mot, le problème est que toute référence provenant de Java peut être nulle, et Kotlin, étant de conception null-safe, a forcé l'utilisateur à vérifier null chaque valeur Java, ou à utiliser des appels sécurisés (
?.
) ou des assertions non nulles (!!
). Ces fonctionnalités très pratiques dans le monde pur de Kotlin ont tendance à se transformer en désastre lorsque vous devez les utiliser trop souvent dans le paramètre Kotlin / Java.C'est pourquoi nous avons adopté une approche radicale et assoupli le système de types de Kotlin en ce qui concerne l'interopérabilité Java: maintenant les références provenant de Java ont des types spécialement marqués - Kotlin Blog
platform types
C'est la notation pour les types de plateforme :
T!
signifie "T
ouT?
"la source
T
signifie "T!
ouT?
"T
été rendu "non nullable", et le reste était plus ou moins arbitraireUn Type noté avec
!
est appelé type de plate-forme , qui est un type provenant de Java et peut donc très probablement l'êtrenull
. C'est ce que le compilateur Kotlin déduit par défaut lors de l'appel de Java (pour les cas les plus élémentaires, les méthodes Java peuvent être annotées pour contourner cela). Vous devez gérer les types de plate-forme comme des types Nullable , à moins que vous ne sachiez certainement que l'API particulière ne reviendra jamaisnull
. Le compilateur permet d'affecter des types de plate-forme à des variables de types à la fois Nullable et non Null.Vous pouvez faire référence aux types de plates-formes comme des «types de nullabilité inconnue ». Il est également important de savoir que vous ne pouvez pas utiliser le type marqué d'exclamation pour vos propres types, cela ne fait pas partie de la syntaxe Kotlin, ce n'est qu'une notation .
la source
Les noms de type ou les noms de classe se terminant par un seul point d'exclamation
!
sont appelés types de plate-forme dans Kotlin. Vous les trouvez lorsque vous travaillez dans Kotlin avec un ancien code Java qui ne contient pas d'informations sur la nullité.Par exemple:
Informations Nullable: Type Nullable
@Nullable String
en Java est considéré commeString?
par Kotlin.Informations non nulles: type non nul
@NotNull String
en Java est considéré commeString
par Kotlin.Aucune information: Type de plate-forme
String
sans annotations en Java est considéré commeString!
par Kotlin.Comment gérer les types de plates-formes?
Vous pouvez travailler avec un type de plate-forme sous la forme d'une valeur Nullable ou non Null. Le compilateur vous permettra d'appeler toutes les méthodes sur ce type. Il est de votre responsabilité de les utiliser. Si vous savez que la valeur peut être null, vous devez la comparer avec null avant d'appeler des méthodes dessus. Si vous savez que ce n'est pas nul, vous pouvez l'utiliser directement, mais comme en Java, vous obtiendrez une exception si votre hypothèse sur la nullité est fausse.
Notez que vous ne pouvez pas déclarer les types de plates-formes dans le code Kotlin, ils proviennent uniquement du code Java.
Héritage et types de plate-forme
Lors du remplacement des méthodes Java dans le code Kotlin, vous avez la possibilité de déclarer des paramètres et de renvoyer des types comme Nullable ou Non Null. Vous devez choisir cela judicieusement, car si vous décidez de rendre les paramètres non nuls, le compilateur Kotlin génère des assertions non nulles pour ces paramètres non nuls. Et la prochaine fois que vous accéderez à ce code Kotlin à partir de Java et que vous passerez une valeur nulle, vous obtiendrez une exception.
J'espère que cela aidera à dissiper tous vos doutes sur les types de plates-formes.
la source
Comme mentionné par s1m0nw1,
T!
signifieT or T?
. La question suivante est: qu'est-ce que c'estT?
? Ceci est bien documenté sur https://kotlinlang.org/docs/reference/null-safety.html . Kotlin ne permet pas à certains éléments d'êtrenull
, par exempleString
, contrairement à Javala source
Extrait des types de plates-formes dans Kotlin :
Par exemple:
Signifie simplement ce qui suit: " La collection Java de T peut être mutable ou non, peut être nulle ou non ".
J'espère que cela t'aides.
la source