Middle
Jaké jsou vlastnosti práce s anotacemi v Kotlinu?
sobes.tech AI
Odpověď od AI
Komentáře v Kotlinu jsou podobné komentářům v Javě, ale mají několik vlastností:
- Syntaxe: Komentáře se umisťují před prvek, na který se vztahují, bez symbolu
@. - Použití v době běhu: Ve výchozím nastavení se komentáře neukládají do doby běhu. Pro jejich zachování je nutné použít meta-annotaci
@Retention(AnnotationRetention.RUNTIME). - Aplikace na typ: Komentáře lze aplikovat nejen na třídy, funkce a vlastnosti, ale také na typy (například
@NonNull String). K tomu se používátypealias. - Komentování konstruktorů: Pro komentování hlavního konstruktoru třídy se používá klíčové slovo
constructor. U sekundárních konstruktorů je komentář umístěn přímo před nimi. - Komentování vlastností a jejich accessorů: Komentáře lze aplikovat na vlastnost, její getter (
@get:) nebo setter (@set:). - Komentování parametrů konstruktoru: Komentáře aplikované na parametry hlavního konstruktoru, které jsou zároveň vlastnostmi, komentují tyto vlastnosti. Pro komentování samotného parametru se používá
@param:. - Komentování parametrů funkcí a metod: Komentáře jsou umístěny přímo před parametrem.
- Práce s komentáři v reflexi: Kotlin reflexe (
kotlin-reflect) umožňuje získat informace o komentářích v době běhu, pokud je použita@Retention(AnnotationRetention.RUNTIME). - Oblast použití: Komentáře mohou mít cílové oznámení pomocí prefixů:
@file:- pro soubor@property:- pro vlastnost@field:- pro pole generované pro vlastnost@get:- pro getter vlastnosti@set:- pro setter vlastnosti@param:- pro parametr konstruktoru@setparam:- pro parametr setteru vlastnosti@delegate:- pro pole delegata@use-site:- pro použití místa, když není možné přesně určit cíl
Příklad vytvoření a použití anotace:
// Definice anotace
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)
// Použití anotace
@MyAnnotation("Hello")
class MyClass {
@get:MyAnnotation("World")
val myProperty: String = "nějaká hodnota"
constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
// ...
}
fun myFunction(@MyAnnotation("FunctionParam") param: String) {
// ...
}
}