Différence entre `*` et `Any` dans les génériques Kotlin : astérisque vs Any
Bonjour à tous ! J'ai commencé à étudier Kotlin récemment et je suis tombé sur un point flou dans les génériques.
Dans la documentation, j'ai vu qu'on peut utiliser `*` (star projection) dans les génériques, et aussi écrire ``. À première vue, on dirait qu'ils font la même chose — permettre de stocker n'importe quel type dans une collection. Mais je sens qu'il y a une différence importante entre eux.
Par exemple, j'écris ce code :
```kotlin
val list1: MutableList = mutableListOf("chaîne", 42, 3.14)
val list2: MutableList<*> = mutableListOf("chaîne", 42, 3.14)
```
Les deux variables fonctionnent, et je peux y ajouter n'importe quel élément. Mais si j'essaie de lire un élément et de l'assigner à une variable avec un type spécifique, des bizarreries apparaissent.
Si j'écris :
```kotlin
val item1: String = list1[0] // Erreur de compilation ? Ou pas ?
val item2: String = list2[0] // Et ici ?
```
La première variante se compile, mais pas la seconde. Pourquoi ? Et quelle est la différence entre `*` et `Any` ? Quand utiliser quoi ? Expliquez, s'il vous plaît.
No answers yet.
Connectez-vous pour laisser une réponse
Blogs