0Pricing
Kotlin Academy · Lektion

Reifizierte Typparameter: Auf T zur Laufzeit zugreifen

Verwenden Sie reified mit inline-Funktionen, um zur Laufzeit Typprüfungen und Casts durchzuführen.

Reifizierte Typparameter: Auf T zur Laufzeit zugreifen ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Problem der Typlöschung

Kotlin/JVM löscht generische Typinformationen zur Laufzeit. Innerhalb einer generischen Funktion fun foo() können Sie T::class oder is T nicht schreiben – die JVM weiß nach der Kompilierung nicht, was T ist.

reified schafft Abhilfe

Kombinieren Sie inline beim Typ-Parameter mit reified. Da die Funktion inline eingefügt wird, ersetzt der Compiler an jeder Aufrufstelle den tatsächlichen Typ – dadurch ist T zur Laufzeit vollständig zugänglich.

inline fun <reified T> isInstance(value: Any): Boolean = value is T

val result = isInstance<String>("hello")  // true

Typprüfung mit is T

Ohne reified führt is T zu einem Kompilierungsfehler („Auf eine Instanz eines gelöschten Typs kann nicht geprüft werden“). Mit reified schreibt der Compiler die Prüfung unter Verwendung des konkreten Typs um, der an der Aufrufstelle angegeben wurde.

inline fun <reified T> filterByType(list: List<Any>): List<T> =
    list.filterIsInstance<T>()

KClass aus T ermitteln

Sie können die KClass des Typparameters mit T::class ermitteln. Dadurch werden Typprüfungen ohne Reflection sowie an APIs übergebene Klassenreferenzen möglich.

inline fun <reified T> className(): String = T::class.simpleName ?: "Unknown"

println(className<Int>())  // "Int"

Parsen mit reified

Ein häufiges Muster ist eine typsichere parseJson-Hilfsfunktion, die die Zielklasse automatisch erhält:

inline fun <reified T> parseJson(json: String): T =
    jacksonObjectMapper().readValue(json, T::class.java)

ViewModel-/Service-Locator-Pattern

Dependency-Injection-Container verwenden häufig reified, um die richtige Instanz zurückzugeben, ohne dass Sie ein Class-Argument übergeben müssen:

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

Java-APIs mit Class<T> aufrufen

Viele Java-APIs benötigen ein Class-Argument. Mit reified können Sie sie aufrufen, ohne die Aufrufenden dazu zu zwingen, die Klasse explizit zu übergeben:

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

Reified und Typbeschränkungen

Sie können reified mit oberen Schranken kombinieren:

inline fun <reified T : Any> create(): T =
    T::class.java.getDeclaredConstructor().newInstance()

Einschränkungen

Reifizierte Typparameter funktionieren nur in inline-Funktionen – nicht in Klassen, Interfaces oder Nicht-inline-Funktionen. Sie können eine reified-Funktion nicht mit einem unbekannten Typ aufrufen, der nur zur Laufzeit bekannt ist.

So implementiert der Compiler die Funktion

An jeder Aufrufstelle ersetzt der Compiler T durch das tatsächliche Typargument. Der Bytecode an der Aufrufstelle enthält direkte Verweise auf die konkrete Klasse – Reflection ist nicht erforderlich.

Beispiele aus der Standardbibliothek

Funktionen der Standardbibliothek, die reified verwenden: filterIsInstance(), emptyArray(), arrayOf(), typeOf(). Diese funktionieren genau deshalb, weil sie inline + reified sind.

Kurzer Test

Warum muss eine Funktion, die reified verwendet, inline sein?

Zusammenfassung: Reifizierte Typparameter

Wichtigste Erkenntnisse:

  • reified macht einen Typparameter zur Laufzeit zugänglich und umgeht die Typlöschung
  • Erfordert, dass die Funktion inline ist
  • Ermöglicht is T, T::class und T::class.java innerhalb der Funktion
  • Ermöglicht typsicheres JSON-Parsen, DI-Hilfsfunktionen und APIs für Klassenreferenzen

Häufig gestellte Fragen

Ist die Lektion „Reifizierte Typparameter: Auf T zur Laufzeit zugreifen“ kostenlos?

Ja — der vollständige Text von „Reifizierte Typparameter: Auf T zur Laufzeit zugreifen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Reifizierte Typparameter: Auf T zur Laufzeit zugreifen“?

Verwenden Sie reified mit inline-Funktionen, um zur Laufzeit Typprüfungen und Casts durchzuführen. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Reifizierte Typparameter: Auf T zur Laufzeit zugreifen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. inline-Funktionen: Lambda-Overhead vermeiden
  2. noinline- und crossinline-Modifier
  3. Reifizierte Typparameter: Auf T zur Laufzeit zugreifen
  4. Praktische reified-Muster: Parsing, DI und Serialisierung
← Zurück zu Kotlin Academy