0Pricing
Kotlin Academy · Lekcja

Parametry typów reified: dostęp do T w czasie działania

Używaj reified z funkcjami inline do sprawdzania typów i rzutowania w czasie działania.

Parametry typów reified: dostęp do T w czasie działania to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Problem wymazywania typów

Kotlin/JVM usuwa informacje o typach generycznych w czasie wykonywania. Wewnątrz funkcji generycznej fun foo() nie można napisać T::class ani is T — po kompilacji JVM nie wie, czym jest T.

reified na ratunek

Połącz inline z reified dla parametru typu. Ponieważ funkcja jest wstawiana, kompilator podstawia rzeczywisty typ w każdym miejscu wywołania, dzięki czemu T jest w pełni dostępne w czasie wykonywania.

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

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

Sprawdzanie typu za pomocą is T

Bez reified wyrażenie is T powoduje błąd kompilacji („Cannot check for instance of erased type”). Dzięki niemu kompilator przepisuje sprawdzenie, używając konkretnego typu przekazanego w miejscu wywołania.

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

Pobieranie KClass z T

Klasy KClass parametru typu można uzyskać za pomocą T::class. Umożliwia to sprawdzanie typów bez refleksji oraz przekazywanie referencji do klas do interfejsów API.

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

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

Parsowanie za pomocą reified

Typowym rozwiązaniem jest bezpieczny typowo pomocnik parseJson, który automatycznie otrzymuje klasę docelową:

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

Wzorzec ViewModel / Service Locator

Kontenery wstrzykiwania zależności często używają reified, aby zwrócić właściwą instancję bez konieczności przekazywania argumentu Class:

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

Wywoływanie interfejsów API języka Java za pomocą Class<T>

Wiele interfejsów API języka Java wymaga argumentu Class. reified pozwala wywoływać je bez zmuszania wywołujących do jawnego przekazywania klasy:

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

Reified i ograniczenia typów

Element reified można łączyć z ograniczeniami górnymi:

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

Ograniczenia

Reifikowane parametry typu działają tylko w funkcjach inline — nie w klasach, interfejsach ani funkcjach niebędących funkcjami inline. Nie można wywołać funkcji reified z nieznanym typem znanym wyłącznie w czasie działania.

Jak kompilator to implementuje

W każdym miejscu wywołania kompilator zastępuje T rzeczywistym argumentem typu. Kod bajtowy w miejscu wywołania zawiera bezpośrednie odwołania do konkretnej klasy — refleksja nie jest potrzebna.

Przykłady z biblioteki standardowej

Funkcje biblioteki standardowej używające reified: filterIsInstance(), emptyArray(), arrayOf(), typeOf(). Działają precyzyjnie dlatego, że są jednocześnie funkcjami inline + reified.

Szybkie sprawdzenie

Dlaczego reified wymaga, aby funkcja była funkcją inline?

Podsumowanie: reifikowane parametry typu

Najważniejsze informacje:

  • reified udostępnia parametr typu w czasie działania, omijając wymazywanie typów
  • Wymaga, aby funkcja była funkcją inline
  • Umożliwia używanie is T, T::class i T::class.java wewnątrz funkcji
  • Ułatwia bezpieczne typowo parsowanie JSON, pomocniki DI oraz interfejsy API korzystające z referencji do klas

Często zadawane pytania

Czy lekcja „Parametry typów reified: dostęp do T w czasie działania” jest bezpłatna?

Tak — pełny tekst „Parametry typów reified: dostęp do T w czasie działania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Parametry typów reified: dostęp do T w czasie działania”?

Używaj reified z funkcjami inline do sprawdzania typów i rzutowania w czasie działania. Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Parametry typów reified: dostęp do T w czasie działania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Funkcje inline: eliminowanie narzutu lambd
  2. Modyfikatory noinline i crossinline
  3. Parametry typów reified: dostęp do T w czasie działania
  4. Praktyczne wzorce reified: parsowanie, DI i serializacja
← Powrót do Kotlin Academy