Refleksja w Kotlinie: KClass, KFunction, KProperty
Przeglądaj metadane klas za pomocą KClass i sprawdzaj ich elementy przez refleksję.
Refleksja w Kotlinie: KClass, KFunction, KProperty to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 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.
Czym jest refleksja?
Refleksja pozwala kodowi analizować i wywoływać własną strukturę w czasie działania: klasy, funkcje, właściwości, adnotacje i konstruktory. Kotlin opakowuje interfejs API refleksji JVM we własne, bogatsze typy dostępne w pakiecie kotlin.reflect.
Uzyskiwanie obiektu KClass
Należy użyć ::class dla typu lub instancji, aby uzyskać odwołanie KClass:
val klass: KClass<String> = String::class
val instance: KClass<out Any> = "hello"::class
println(klass.simpleName) // "String"Właściwości KClass
KClass udostępnia metadane klasy:
val klass = String::class
println(klass.simpleName) // "String"
println(klass.qualifiedName) // "kotlin.String"
println(klass.isAbstract) // false
println(klass.constructors.size) // number of constructorsKFunction: odwołania wywoływalne
Należy użyć ::functionName, aby uzyskać odwołanie KFunction. Można sprawdzać jego parametry i wywoływać go:
fun greet(name: String) = "Hello, $name!"
val fn: KFunction<String> = ::greet
println(fn.name) // "greet"
println(fn.call("Kotlin")) // "Hello, Kotlin!"Sprawdzanie parametrów
KFunction.parameters zwraca listę obiektów KParameter zawierających nazwę, typ i informację o opcjonalności:
fun add(a: Int, b: Int) = a + b
::add.parameters.forEach {
println("${it.name}: ${it.type}")
}
// a: kotlin.Int
// b: kotlin.IntKProperty: odwołania do właściwości
Odwołania do właściwości przedstawiają właściwość jako obiekt pierwszej klasy. KProperty0 służy do właściwości bez odbiornika, a KProperty1 do właściwości członkowskich.
data class User(val name: String, val age: Int)
val prop: KProperty1<User, String> = User::name
val user = User("Alice", 30)
println(prop.get(user)) // "Alice"Właściwości mutowalne z KMutableProperty
W przypadku właściwości var odwołanie ma typ KMutableProperty1, który udostępnia również funkcję set:
class Box(var value: Int)
val prop: KMutableProperty1<Box, Int> = Box::value
val box = Box(10)
prop.set(box, 42)
println(box.value) // 42Wyświetlanie wszystkich elementów członkowskich
KClass.members zwraca wszystkie widoczne elementy członkowskie (funkcje i właściwości). KClass.declaredMemberProperties zwraca tylko właściwości zadeklarowane w danej klasie.
data class Point(val x: Int, val y: Int)
Point::class.declaredMemberProperties.forEach {
println(it.name) // "x", "y"
}Tworzenie instancji za pomocą KClass
Należy wywołać KClass.createInstance() (wymaga konstruktora bezargumentowego) lub użyć KClass.constructors, aby uzyskać pełną kontrolę:
class Counter {
var count = 0
}
val c = Counter::class.createInstance()
c.count = 5
println(c.count) // 5Zależność Kotlin Reflect
Refleksja Kotlina wymaga artefaktu kotlin-reflect (nie jest on dołączony do biblioteki standardowej). Należy dodać go do procesu budowania:
// build.gradle.kts
implementation("org.jetbrains.kotlin:kotlin-reflect")Uwaga dotycząca wydajności
Refleksja jest znacznie wolniejsza niż bezpośredni kod. Należy buforować odwołania KClass, KFunction i KProperty podczas uruchamiania. Należy unikać ich wywoływania w gorących pętlach. W przypadku większości narzędzi i kodu frameworków ten koszt jest akceptowalny.
Szybkie sprawdzenie
Jaki typ Kotlina reprezentuje odwołanie do właściwości członkowskiej i pozwala odczytać jej wartość z instancji?
Podsumowanie: refleksja w Kotlinie
Najważniejsze typy:
KClass— metadane klasy, konstruktory i elementy członkowskieKFunction— odwołania wywoływalne, parametry i wywoływanieKProperty1/KMutableProperty1— odwołania do właściwości oraz operacje get/set- Wymaga obecności
kotlin-reflectw ścieżce klas - Należy buforować odwołania i unikać ich w intensywnie wykonywanych ścieżkach kodu
Często zadawane pytania
Czy lekcja „Refleksja w Kotlinie: KClass, KFunction, KProperty” jest bezpłatna?
Tak — pełny tekst „Refleksja w Kotlinie: KClass, KFunction, KProperty” 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 „Refleksja w Kotlinie: KClass, KFunction, KProperty”?
Przeglądaj metadane klas za pomocą KClass i sprawdzaj ich elementy przez refleksję. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Refleksja w Kotlinie: KClass, KFunction, KProperty”?
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
- Refleksja w Kotlinie: KClass, KFunction, KProperty
- Tworzenie własnych adnotacji i określanie ich celów
- Odczytywanie adnotacji w czasie działania
- Walidacja i mapowanie oparte na refleksji