0Pricing
Kotlin Academy · Lekcja

Definiowanie adnotacji

Twórz własne adnotacje

Definiowanie adnotacji to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 2 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.

Deklarowanie adnotacji

Adnotację definiuje się za pomocą słów kluczowych annotation class. Najprostsza adnotacja nie przechowuje danych i pełni funkcję znacznika.

annotation class Beta

@Beta
fun newFeature() = "experimental"

fun main() {
    println(newFeature())
}

Parametry adnotacji

Adnotacje mogą przechowywać dane za pomocą parametrów konstruktora. Dozwolone typy są ograniczone: typy proste, String, wyliczenia, inne adnotacje, KClass oraz tablice tych typów.

annotation class ApiVersion(val value: Int)

@ApiVersion(2)
fun endpoint() = "v2"

fun main() {
    println(endpoint())
}

@Target

@Target ogranicza miejsca, w których można zastosować daną adnotację. Przekazuje się do niego jedną lub więcej wartości AnnotationTarget, takich jak CLASS, FUNCTION lub PROPERTY.

@Target(AnnotationTarget.FUNCTION)
annotation class Loggable

@Loggable
fun process() = "processing"

fun main() {
    println(process())
}

@Retention

@Retention określa, jak długo adnotacja pozostaje dostępna:

  • SOURCE — usuwana przez kompilator
  • BINARY — zachowywana w pliku klasy, ale niewidoczna dla refleksji
  • RUNTIME — zachowywana i widoczna dla refleksji (wartość domyślna)
@Retention(AnnotationRetention.RUNTIME)
annotation class Important

@Important
class Order

fun main() {
    println("Important is readable at runtime")
}

Wiele celów

Można wymienić kilka celów, aby zezwolić na użycie adnotacji w więcej niż jednym miejscu. W tym przypadku adnotacja działa zarówno dla klas, jak i funkcji.

@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
annotation class Audited

@Audited
class Account {
    @Audited
    fun withdraw() = "ok"
}

fun main() {
    println(Account().withdraw())
}

Domyślne wartości parametrów

Parametry adnotacji mogą mieć wartości domyślne, dzięki czemu można je pominąć podczas wywołania. Ułatwia to zapis typowych przypadków.

annotation class Cache(val seconds: Int = 60)

@Cache
fun cheap() = 1

@Cache(seconds = 300)
fun expensive() = 2

fun main() {
    println("" + cheap() + " " + expensive())
}

Parametry tablicowe

Można używać typów tablicowych. Wartości należy podawać za pomocą składni literału tablicowego [ ... ] podczas używania adnotacji.

annotation class Roles(val names: Array<String>)

@Roles(["admin", "editor"])
fun restricted() = "secret"

fun main() {
    println(restricted())
}

@Repeatable

Domyślnie adnotacja może wystąpić tylko raz dla danego elementu. Oznacz ją za pomocą @Repeatable, aby można było zastosować ją wiele razy.

@Repeatable
annotation class Tag(val value: String)

@Tag("db")
@Tag("cache")
fun layered() = "ok"

fun main() {
    println(layered())
}

Zagnieżdżone parametry adnotacji

Parametrem adnotacji może być inna adnotacja, co pozwala tworzyć uporządkowane metadane.

annotation class Author(val name: String)
annotation class Module(val owner: Author)

@Module(Author("Grace"))
class Payments

fun main() {
    println("Nested annotation metadata defined")
}

Projektowanie dobrych adnotacji

Dobrze zaprojektowana adnotacja:

  • Ma jasno określony, pojedynczy cel
  • Ustawia @Target, aby niewłaściwe użycie powodowało błąd kompilacji
  • Używa zachowywania RUNTIME tylko wtedy, gdy jest ono potrzebne refleksji
  • Udostępnia rozsądne wartości domyślne

Od definicji do użycia

Zdefiniowanie adnotacji to tylko połowa zadania. Sama w sobie jest ona biernymi metadanymi. Coś musi ją odczytać — zazwyczaj refleksja w czasie działania albo procesor adnotacji podczas kompilacji. Wkrótce użyją Państwo refleksji.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat definiowania adnotacji.

Podsumowanie

Nauczyli się Państwo definiować adnotacje:

  • annotation class z parametrami
  • @Target do ograniczania miejsc użycia
  • @Retention do kontrolowania czasu zachowania
  • @Repeatable i wartości domyślne

W następnej części: inspekcja typów za pomocą refleksji.

Często zadawane pytania

Czy lekcja „Definiowanie adnotacji” jest bezpłatna?

Tak — pełny tekst „Definiowanie adnotacji” 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 „Definiowanie adnotacji”?

Twórz własne adnotacje Ć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 2 z 4.

Ile czasu zajmuje lekcja „Definiowanie adnotacji”?

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