0Pricing
Kotlin Academy · Lekcja

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 — klasa
  • KProperty — właściwość
  • KFunction — funkcja
  • KParameter — parametr

Razem pozwalają dynamicznie odczytywać strukturę.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat podstaw refleksji.

Podsumowanie

Nauczyli się Państwo podstaw refleksji:

  • Uzyskiwanie obiektu KClass za pomocą ::class
  • Wyświetlanie elementów memberProperties i memberFunctions
  • 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

  1. Korzystanie z adnotacji
  2. Definiowanie adnotacji
  3. Podstawy refleksji
  4. Praktyczna refleksja
← Powrót do Kotlin Academy