Kotlin Academy · Leçon

Variance au site d’utilisation

Projections de types

Leçon 3 sur 413 étapes

Variance au site d’utilisation est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.

Variance au point d’utilisation

Il arrive qu’une classe générique soit globalement invariante, alors qu’une fonction donnée ne fasse que produire ou que consommer le type. La variance au point d’utilisation, également appelée projection de type, applique out ou in directement à l’endroit où le type est utilisé.

Pourquoi utiliser la variance au point d’utilisation

Une classe invariante comme MutableList<T> ne peut pas être rendue covariante dans sa déclaration, car elle lit et écrit T. En revanche, une fonction donnée peut uniquement la lire, et les projections permettent de l’exprimer en toute sécurité.

Projection out

Écrire Array<out T> comme type de paramètre produit une vue covariante : vous pouvez lire T, mais pas l’écrire. Vous pouvez ainsi transmettre un Array<String> là où un Array<out Any> est attendu.

fun printArray(items: Array<out Any>) {
    for (item in items) println(item)
}

fun main() {
    val names: Array<String> = arrayOf("Ann", "Bob")
    printArray(names)
}

Lecture seule

Avec une projection out, le compilateur autorise les lectures, c’est-à-dire les sorties, mais interdit les écritures, c’est-à-dire les entrées, car une écriture pourrait compromettre la sécurité de typage du tableau d’origine.

Projection in

Écrire Array<in T> produit une vue contravariante : vous pouvez y écrire T, mais les lectures renvoient Any?. Vous pouvez ainsi accepter des tableaux de T ou de n’importe quel supertype.

fun fill(dest: Array<in Int>, value: Int) {
    for (i in dest.indices) dest[i] = value
}

fun main() {
    val numbers: Array<Number> = arrayOf(0, 0, 0)
    fill(numbers, 7)
    println(numbers.toList())
}

Écriture seule

Avec une projection in, vous pouvez écrire des valeurs de T, c’est-à-dire des entrées, mais le type des éléments est considéré comme le type supérieur pour les lectures, puisque le type réel des éléments peut être n’importe quel supertype.

Projections et variance au niveau de la déclaration

La variance au niveau de la déclaration, comme dans class Box<out T>, s’applique partout où la classe est utilisée. Les projections au point d’utilisation, comme Box<out T> en tant que paramètre, ne s’appliquent qu’à cet endroit précis. Utilisez les projections lorsque la classe elle-même doit rester invariante.

La projection étoile

Lorsque l’argument de type ne vous importe absolument pas, utilisez la projection étoile *. List<*> désigne une liste d’un type inconnu quelconque ; vous pouvez lire ses éléments selon la borne supérieure, mais vous ne pouvez pas y écrire de manière sûre.

fun printSize(collection: List<*>) {
    println("Size: ${collection.size}")
}

fun main() {
    printSize(listOf(1, 2, 3))
    printSize(listOf("a", "b"))
}

Limites de la projection étoile

Avec *, vous pouvez toujours appeler les membres indépendants du type, comme size, et lire les éléments en tant que Any?, mais vous ne pouvez pas ajouter d’éléments, car leur type réel est inconnu.

fun main() {
    val unknown: List<*> = listOf("x", "y")
    val first: Any? = unknown.first()
    println(first)
}

Choisir une projection

Utilisez out T lorsqu’une fonction ne fait que lire, in T lorsqu’elle ne fait qu’écrire, et * lorsque le type exact n’a pas d’importance. Ces projections permettent d’utiliser des classes invariantes de manière flexible et sûre du point de vue des types.

Relation avec les jokers de Java

Les projections Kotlin out T et in T correspondent aux jokers Java ? extends T et ? super T. Si vous connaissez les génériques de Java, les projections vous sembleront familières.

Vérification rapide

Que pouvez-vous faire avec un paramètre typé Array<out Any> ?

Récapitulatif

La variance au point d’utilisation applique les projections out (lecture seule) ou in (écriture seule) dans un contexte précis, et * comme projection étoile lorsque le type est inconnu. Cela rend les classes invariantes flexibles sans modifier leur déclaration. Vous allez maintenant restreindre les paramètres de type à l’aide de contraintes génériques.

Gratuit pour commencer

Apprends Kotlin avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Variance au site d’utilisation » est-elle gratuite ?

Oui — le texte complet de « Variance au site d’utilisation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Variance au site d’utilisation » ?

Projections de types Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Kotlin Academy ?

Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Variance au site d’utilisation » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?

Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fonctions et classes génériques
  2. Variance au site de déclaration
  3. Variance au site d’utilisation
  4. Contraintes génériques
← Retour à Kotlin Academy