Kotlin Academy · Lektion

reified-typeparametre: Adgang til T under kørsel

Brug reified sammen med inline-funktioner til at udføre typekontroller og casts under kørsel.

Lektion 3 af 413 trin

reified-typeparametre: Adgang til T under kørsel er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Problemet med typeudviskning

Kotlin/JVM udvisker oplysninger om generiske typer under kørsel. Inde i en generisk funktion som fun foo() kan du ikke skrive T::class eller is T — JVM'en ved ikke, hvad T er efter kompileringen.

reified til undsætning

Kombiner inline med reified på typeparameteren. Fordi funktionen inlines, erstatter compileren typen med den konkrete type på hvert kaldested — så T er fuldt tilgængelig under kørsel.

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

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

Kontrol af type med is T

Uden reified medfører is T en kompileringstidsfejl ("Kan ikke kontrollere en instans af en type, der er slettet"). Med reified omskriver compileren kontrollen ved hjælp af den konkrete type, der blev angivet på kaldsstedet.

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

Hent KClass fra T

Du kan hente typeparameterens KClass med T::class. Det gør typetjek uden refleksion og klassehenvisninger, der sendes til API'er, muligt.

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

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

Parsing med reified

Et almindeligt mønster er en typesikker parseJson-hjælpefunktion, der automatisk modtager målklassen:

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

ViewModel-/tjenestelokator-mønster

Afhængighedsinjektionscontainere bruger ofte reified til at returnere den korrekte instans, uden at du behøver at sende et Class-argument:

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

Kald af Java-API'er med Class<T>

Mange Java-API'er kræver et Class-argument. reified lader dig kalde dem, uden at du tvinger kaldere til at sende klassen eksplicit:

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

reified og typebegrænsninger

Du kan kombinere reified med øvre grænser:

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

Begrænsninger

Reified-typeparametre fungerer kun i inline-funktioner — ikke i klasser, grænseflader eller funktioner, der ikke er inline. Du kan ikke kalde en reified-funktion med en ukendt type, der kun kendes under kørsel.

Sådan implementerer compileren det

Ved hvert kaldssted erstatter compileren T med det faktiske typeargument. Bytekoden på kaldsstedet indeholder direkte referencer til den konkrete klasse — der er ikke brug for refleksion.

Eksempler fra standardbiblioteket

Standardbiblioteksfunktioner, der bruger reified: filterIsInstance(), emptyArray(), arrayOf(), typeOf(). De fungerer netop, fordi de er inline + reified.

Hurtigt tjek

Hvorfor kræver reified, at funktionen er inline?

Opsummering: reified-typeparametre

Vigtigste pointer:

  • reified gør en typeparameter tilgængelig under kørsel og omgår typesletning
  • Kræver, at funktionen er inline
  • Gør is T, T::class og T::class.java i funktionen mulige
  • Muliggør typesikker JSON-fortolkning, DI-hjælpefunktioner og API'er med klassehenvisninger
Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “reified-typeparametre: Adgang til T under kørsel” gratis?

Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “reified-typeparametre: Adgang til T under kørsel”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “reified-typeparametre: Adgang til T under kørsel”?

Brug reified sammen med inline-funktioner til at udføre typekontroller og casts under kørsel. Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Kotlin Academy?

Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “reified-typeparametre: Adgang til T under kørsel”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?

Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. inline-funktioner: Fjernelse af lambda-overhead
  2. noinline- og crossinline-modifikatorer
  3. reified-typeparametre: Adgang til T under kørsel
  4. Praktiske reified-mønstre: Parsing, DI og serialisering
← Tilbage til Kotlin Academy