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 kompilatorBINARY— zachowywana w pliku klasy, ale niewidoczna dla refleksjiRUNTIME— 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
RUNTIMEtylko 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 classz parametrami@Targetdo ograniczania miejsc użycia@Retentiondo kontrolowania czasu zachowania@Repeatablei 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
- Korzystanie z adnotacji
- Definiowanie adnotacji
- Podstawy refleksji
- Praktyczna refleksja