Avatar ·

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.