197 votes

Point d'exclamation unique à Kotlin

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.

209voto

Mibac Points 3750

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

79voto

voddan Points 16

C'est la notation pour les types de plateformes :

T! signifie " T ou T? "

17voto

s1m0nw1 Points 21698

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.

4voto

user1587329 Points 91

Je l'ai vu quelques fois, surtout lors de l'utilisation des Api Java

Comme mentionné par s1m0nw1, T! moyen T 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 à Java

Pour 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?.

1voto

Gigantic Points 4447

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és Platform 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X