Kotlin Academy · Leçon

Modèles pratiques avec reified : analyse, DI et sérialisation

Appliquez les génériques reified à l’analyse JSON, à la résolution des dépendances et aux utilitaires de réflexion.

Leçon 4 sur 414 étapes

Modèles pratiques avec reified : analyse, DI et sérialisation est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.

Les trois principaux cas d'utilisation

Les paramètres de type réifiés sont particulièrement utiles dans trois modèles Kotlin récurrents : l'analyse JSON et des données, l'injection de dépendances et les utilitaires de sérialisation. Chacun élimine les arguments ::class.java répétitifs.

Modèle 1 — Analyse JSON sécurisée par le type

Encapsulez Gson ou Jackson dans une extension réifiée afin que les appelants n'aient jamais à transmettre explicitement une Class :

inline fun <reified T> String.parseJson(): T =
    Gson().fromJson(this, T::class.java)

val user: User = jsonString.parseJson()

Analyser des collections

L'analyse d'une liste générique nécessite un TypeToken. Avec reified, vous pouvez masquer cette complexité :

inline fun <reified T> String.parseList(): List<T> {
    val type = object : TypeToken<List<T>>() {}.type
    return Gson().fromJson(this, type)
}

val users: List<User> = jsonString.parseList()

Approche avec kotlinx.serialization

kotlinx.serialization utilise déjà reified en interne. La fonction de niveau supérieur decodeFromString() s'appuie sur serializer(), qui est une fonction reified inline.

val user = Json.decodeFromString<User>(jsonString)
// equivalent to: Json.decodeFromString(serializer<User>(), jsonString)

Modèle 2 — localisateur de services / DI

Un localisateur de services simple peut résoudre les dépendances par type sans que les appelants transmettent une KClass :

object ServiceLocator {
    val registry = mutableMapOf<KClass<*>, Any>()
    inline fun <reified T : Any> get(): T =
        registry[T::class] as? T ?: error("No binding for ${T::class}")
    inline fun <reified T : Any> bind(instance: T) {
        registry[T::class] = instance
    }
}

Récupérer un ViewModel dans Android

Le modèle réifié le plus courant dans Android :

inline fun <reified VM : ViewModel> ComponentActivity.viewModel(): VM =
    ViewModelProvider(this)[VM::class.java]

// Usage
val vm: MyViewModel by lazy { viewModel() }

Modèle 3 — utilitaire de conversion sûre

Un utilitaire de conversion réifié avec une solution de repli est plus propre que l'utilisation explicite de as? partout :

inline fun <reified T> Any?.safeCast(): T? = this as? T

val name: String? = someAny.safeCast<String>()

Vérifier le type des collections

Le filtre de collection standard réifié filterIsInstance() est la référence en la matière. Vous pouvez créer des variantes de niveau supérieur à partir de celui-ci :

inline fun <reified T> List<Any>.onlyInstancesOf(block: (T) -> Unit) =
    filterIsInstance<T>().forEach(block)

items.onlyInstancesOf<Button> { it.setEnabled(true) }

Enregistrer des écouteurs d'événements par type

Un bus d'événements qui distribue les événements par type devient pratique avec reified :

class EventBus {
    val handlers = mutableMapOf<KClass<*>, (Any) -> Unit>()
    inline fun <reified E : Any> on(noinline handler: (E) -> Unit) {
        handlers[E::class] = { handler(it as E) }
    }
    fun post(event: Any) = handlers[event::class]?.invoke(event)
}

Combiner reified et les fonctions d'extension

Les fonctions d'extension réifiées sur des récepteurs génériques donnent aux API une utilisation fluide tout en conservant la sûreté des types :

inline fun <reified T : Any> SharedPreferences.get(key: String, default: T): T = when (T::class) {
    Int::class    -> getInt(key, default as Int) as T
    String::class -> getString(key, default as String) as T
    Boolean::class -> getBoolean(key, default as Boolean) as T
    else -> error("Unsupported type ${T::class}")
}

Limites à garder à l'esprit

N'oubliez pas : reified fonctionne uniquement dans les fonctions inline. Les classes et les interfaces ne peuvent pas avoir de paramètres de type réifiés. Si vous avez besoin d'informations de type à l'exécution dans une classe, stockez plutôt une propriété KClass.

Tester les utilitaires réifiés

Les fonctions réifiées sont faciles à tester : appelez-les avec des arguments de type concrets dans des tests unitaires, puis vérifiez le type et la valeur du résultat. Il n'est pas nécessaire de simuler les références de classe.

val result: List<String> = """["a","b","c"]""".parseList<String>()
assertEquals(listOf("a","b","c"), result)

Vérification rapide

Quelle affirmation sur les fonctions réifiées est correcte ?

Récapitulatif : modèles réifiés pratiques

Modèles essentiels :

  • Analyse JSON : masquez les arguments Class/TypeToken
  • DI/localisateur de services : résolvez par type sans paramètres KClass
  • Conversions sûres et filtrage des collections
  • Distribution par type d'événement avec un bus d'événements
  • SharedPreferences / magasins clé-valeur typés
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 « Modèles pratiques avec reified : analyse, DI et sérialisation » est-elle gratuite ?

Oui — le texte complet de « Modèles pratiques avec reified : analyse, DI et sérialisation » 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 « Modèles pratiques avec reified : analyse, DI et sérialisation » ?

Appliquez les génériques reified à l’analyse JSON, à la résolution des dépendances et aux utilitaires de réflexion. 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 4 sur 4.

Combien de temps prend la leçon « Modèles pratiques avec reified : analyse, DI et sérialisation » ?

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 inline : éliminer le surcoût des lambdas
  2. Modificateurs noinline et crossinline
  3. Paramètres de types reified : accéder à T à l’exécution
  4. Modèles pratiques avec reified : analyse, DI et sérialisation
← Retour à Kotlin Academy