Podstawy refleksji
Analizuj typy w czasie działania
Podstawy refleksji 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.
Czym jest refleksja
Refleksja to możliwość badania i modyfikowania przez program własnej struktury w czasie działania: klas, właściwości, funkcji i adnotacji.
Refleksja w Kotlinie znajduje się w pakiecie kotlin.reflect i koncentruje się wokół KClass.
Uzyskiwanie KClass
Użyj składni ::class dla typu lub instancji, aby uzyskać obiekt KClass.
class Robot
fun main() {
val fromType = Robot::class
val fromInstance = Robot()::class
println(fromType.simpleName)
println(fromInstance.simpleName)
}Nazwy klasy
Obiekt KClass udostępnia właściwości simpleName i qualifiedName. Nazwa kwalifikowana zawiera ścieżkę pakietu.
class Engine
fun main() {
val k = Engine::class
println(k.simpleName)
println(k.qualifiedName)
}Inspekcja właściwości
memberProperties wyświetla właściwości klasy. Każda z nich jest obiektem KProperty, którego właściwość name można odczytać.
import kotlin.reflect.full.memberProperties
class Point(val x: Int, val y: Int)
fun main() {
for (p in Point::class.memberProperties) {
println(p.name)
}
}Odczytywanie wartości właściwości
Obiekt KProperty1 można wywołać z instancją, aby odczytać jej wartość za pomocą get(instance).
import kotlin.reflect.full.memberProperties
class Point(val x: Int, val y: Int)
fun main() {
val p = Point(3, 4)
for (prop in Point::class.memberProperties) {
println(prop.name + " = " + prop.get(p))
}
}Inspekcja funkcji
memberFunctions zwraca funkcje wywoływalne klasy jako obiekty KFunction. Nazwę każdej funkcji można odczytać za pomocą name.
import kotlin.reflect.full.memberFunctions
class Calculator {
fun add(a: Int, b: Int) = a + b
fun negate(a: Int) = -a
}
fun main() {
Calculator::class.memberFunctions
.filter { it.name in listOf("add", "negate") }
.forEach { println(it.name) }
}Referencje do funkcji
Składnia ::name tworzy referencję wywoływalną typu KFunction. Można ją później wywołać za pomocą invoke lub przekazywać dalej.
fun double(n: Int) = n * 2
fun main() {
val ref = ::double
println(ref.name)
println(ref.invoke(21))
}Tworzenie instancji
createInstance() tworzy obiekt za pomocą refleksji, gdy klasa ma konstruktor bez argumentów.
import kotlin.reflect.full.createInstance
class Widget {
override fun toString() = "Widget"
}
fun main() {
val w = Widget::class.createInstance()
println(w)
}Inspekcja konstruktorów
constructors wyświetla konstruktory klasy. Można zbadać ich parameters, aby dowiedzieć się, jakich argumentów oczekują.
class Person(val name: String, val age: Int)
fun main() {
val ctor = Person::class.constructors.first()
ctor.parameters.forEach { println(it.name) }
}Koszty i zastrzeżenia
Refleksja jest potężnym mechanizmem, ale:
- Jest wolniejsza niż bezpośrednie wywołania
- Omija bezpieczeństwo zapewniane podczas kompilacji
- Na JVM wymaga biblioteki
kotlin-reflect
Należy używać jej we frameworkach i narzędziach, a nie w często wykonywanych pętlach.
Narzędzia refleksji
Najważniejsze typy, które warto zapamiętać:
KClass— klasaKProperty— właściwośćKFunction— funkcjaKParameter— parametr
Razem pozwalają dynamicznie odczytywać strukturę.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat podstaw refleksji.
Podsumowanie
Nauczyli się Państwo podstaw refleksji:
- Uzyskiwanie obiektu
KClassza pomocą::class - Wyświetlanie elementów
memberPropertiesimemberFunctions - Odczytywanie wartości właściwości i wywoływanie referencji do funkcji
- Tworzenie obiektów za pomocą
createInstance()
W następnej części: dynamiczne odczytywanie adnotacji.
Często zadawane pytania
Czy lekcja „Podstawy refleksji” jest bezpłatna?
Tak — pełny tekst „Podstawy refleksji” 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 „Podstawy refleksji”?
Analizuj typy 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 „Podstawy refleksji”?
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
- Korzystanie z adnotacji
- Definiowanie adnotacji
- Podstawy refleksji
- Praktyczna refleksja