MWCodebymw.de ↗
Kotlin

inline und reified in Kotlin – den Typ zur Laufzeit behalten

Generische Typen sind in Kotlin zur Laufzeit normalerweise „weg" (Type Erasure). Mit einer inline-Funktion und reified holst du den Typ zurück – und schreibst so knappe Helfer wie fromJson<User>() ohne Class-Parameter.

Ein Detail, über das viele beim Thema Generics stolpern: Zur Laufzeit ist der Typparameter T nicht mehr da (Type Erasure, geerbt von der JVM). Du kannst also nicht einfach T::class schreiben. Kotlin hat dafür einen eleganten Ausweg: inline + reified.

Das Problem

fun <T> istVomTyp(wert: Any): Boolean {
    return wert is T   // ❌ Fehler: "Cannot check for instance of erased type: T"
}

Die Lösung: inline fun mit reified

inline fun <reified T> istVomTyp(wert: Any): Boolean {
    return wert is T   // ✓ funktioniert
}

istVomTyp<String>("hi")   // true
istVomTyp<Int>("hi")      // false

inline bedeutet: Der Compiler kopiert den Funktionskörper an die Aufrufstelle. Dadurch ist der konkrete Typ (String, Int …) dort bekannt und reified macht ihn im Rumpf benutzbar – inklusive is T, T::class oder T::class.java.

Der Klassiker: typisiertes fromJson

So sparst du dir den lästigen Class<T>-Parameter, den Java-Bibliotheken oft verlangen:

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

// Aufruf ohne zweiten Parameter:
val user: User = gson.fromJson(jsonString)

Das liest sich viel schöner als gson.fromJson(jsonString, User::class.java) – der Typ steht links, der Rest ergibt sich.

Wann du es nutzt (und wann nicht)

  • Ja: kleine Helfer, die den Typ zur Laufzeit brauchen (JSON, findViewById-Wrapper, getSystemService).
  • Zurückhaltend: bei großen Funktionskörpern – inline kopiert den Code an jede Aufrufstelle, das bläht das Kompilat auf. Für kurze Helfer ist das egal.

Wenn du eine Android-App in Kotlin planst und Wert auf schlanken, ausdrucksstarken Code legst, setze ich das gern für dich um – schreib mir über bymw.de.

Quellen

#Kotlin#inline#reified#Generics#Type Erasure

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →