0Pricing
Kotlin Academy · Lekcja

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 constructors

KFunction: 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.Int

KProperty: 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)  // 42

Wyś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)  // 5

Zależ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łonkowskie
  • KFunction — odwołania wywoływalne, parametry i wywoływanie
  • KProperty1 / KMutableProperty1 — odwołania do właściwości oraz operacje get/set
  • Wymaga obecności kotlin-reflect w ś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

  1. Refleksja w Kotlinie: KClass, KFunction, KProperty
  2. Tworzenie własnych adnotacji i określanie ich celów
  3. Odczytywanie adnotacji w czasie działania
  4. Walidacja i mapowanie oparte na refleksji
← Powrót do Kotlin Academy