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 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") // trueSprawdzanie 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:
reifiedudostę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::classiT::class.javawewną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
- Funkcje inline: eliminowanie narzutu lambd
- Modyfikatory noinline i crossinline
- Parametry typów reified: dostęp do T w czasie działania
- Praktyczne wzorce reified: parsowanie, DI i serializacja