Que signifie un seul point d'exclamation dans Kotlin? Je l'ai vu à quelques reprises, en particulier lors de l'utilisation d'API Java. Mais je n'ai pas pu le trouver dans la documentation ni sur StackOverflow.
Réponses
Trop de publicités?Ils sont appelés les types de plate-forme et ils veulent dire que Kotlin ne sais pas si cette valeur peut ou ne peut pas être null
, et c'est à vous de décider si c'est de prendre la valeur null ou pas.
En un mot, le problème est que toute référence à venir à partir de Java peut être nulle, et Kotlin, nul-safe by design, contraint l'utilisateur à null-vérifier tous les Java valeur, ou de l'utilisation sécuritaire des appels (
?.
) ou non-null assertions (!!
). Ceux-ci étant très caractéristiques pratiques dans la pure Kotlin monde, ont tendance à se transformer en une catastrophe lorsque vous devez les utiliser trop souvent dans le Kotlin/Java réglage.C'est pourquoi nous avons pris une approche radicale et fait Kotlin du type de système de plus en plus détendu quand il s'agit de Java interop: désormais, les références à venir à partir de Java ont spécialement marqué les types -- Kotlin Blog
C'est la notation pour les types de plateformes :
T!
signifie " T
ou T?
"
Un Type notées avec des !
est appelé le type de plateforme, qui est un type venant de Java et donc peut probablement être null
. C'est ce que le Kotlin compilateur déduit par défaut lors de l'appel de Java (pour les plus de base de cas, les méthodes de Java peut être annoté pour les contourner). Vous devez gérer les types de plate-forme comme nullable types, sauf si vous savez certainement que l'API ne reviendra jamais en null
. Le compilateur permet de types de plate-forme pour être affectés à des variables à la fois les valeurs null et non-null types.
Notation pour les Types de Plate-forme
[...]
T!
signifie "T or T?
" [...]
Vous pourriez vous référer aux types de plate-forme comme "types de inconnu la possibilité de valeur null". Également important de savoir, c'est que vous ne pouvez pas utiliser le point d'exclamation-marqué type pour vos propres types, il ne fait pas partie de la Kotlin syntaxe, c'est seulement une notation.
Je l'ai vu quelques fois, surtout lors de l'utilisation des Api Java
Comme mentionné par s1m0nw1,
T!
moyenT or T?
. La prochaine question est: qu'est -T?
? C'est bien documentée à l' https://kotlinlang.org/docs/reference/null-safety.html. Kotlin ne permet pas à certains éléments pour l'null
, par exemple,String
, contrairement à JavaPour autoriser les valeurs null, on peut déclarer une variable comme nullable chaîne, écrit String?:
var b: String? = "abc" b = null // ok
[...]
b?.length
Cela renvoie b.la longueur si b n'est pas nulle, et null sinon. Le type de cette expression est -
Int?
.
Extrait de Types de Plate-forme en Kotlin :
En plus de spécifier explicitement un type comme option (par exemple,
Person?
), Kotlin nous présente une autre bête, appelésPlatform Type
, indiquée en mettant un seul point d'exclamation à la place (par exemple,Person!
). Ce concept a été créé pour des raisons de compatibilité, lors de l'accès à code de null-dangereux des plates-formes comme Java. C'est souvent le cas lors de l'utilisation d'une bibliothèque Java, de nombreuses méthodes de retour d'SomeType!
, depuis le Kotlin compilateur ne peut pas en déduire si le résultat est nullable ou pas.
Par exemple:
(Mutable)Collection<T>!
Signifie simplement la suivante: "Java collection de T peut être mutables ou pas, peut-être prendre la valeur null ou pas".
Espérons que cette aide.