Middle
Millised on annotatsioonidega töötamise omadused Kotlinis?
sobes.tech AI
Vastus AI-lt
Kotlinis annotations saskan ar Java annotations, kuid neil on mitmed īpašības:
- Sintakse: Annotations novieto pirms elementa, uz kuru tās attiecas, bez
@simbols. - Lietošana run-time: Pēc noklusējuma annotations netiek saglabātas run-time. Lai saglabātu, nepieciešams izmantot meta-annotation
@Retention(AnnotationRetention.RUNTIME). - Pielietojums tipam: Annotations var piemērot ne tikai klasēm, funkcijām un īpašībām, bet arī tipiem (piemēram,
@NonNull String). Tam tiek izmantotstypealias. - Konstruktora anotēšana: Galvenajam konstruktora anotēšanai tiek izmantots vārds
constructor. Sekundāriem konstruktoriem anotācija tiek novietota tieši pirms tiem. - Īpašību un to accessor'u anotēšana: Annotations var piemērot pašai īpašībai, tās getter'iem (
@get:) vai setter'iem (@set:). - Konstruktora parametru anotēšana: Annotations, kas tiek piemērotas galvenā konstruktora parametriem, anotē šos parametrus. Tam tiek izmantots
@param:. - Funkciju un metožu parametru anotēšana: Annotations tiek piemērotas tieši pirms parametra.
- Reflection darbība ar annotations: Kotlin reflection (
kotlin-reflectbibliotēka) ļauj iegūt informāciju par annotations run-time, ja tiek izmantots@Retention(AnnotationRetention.RUNTIME). - Lietojuma joma: Annotations var būt ar mērķa deklarāciju, izmantojot prefiksus:
@file:- failam@property:- īpašībai@field:- laukam, kas ģenerēts īpašībai@get:- getter'iem@set:- setter'iem@param:- konstruktoru parametriem@setparam:- īpašības setter parametriem@delegate:- deleģēšanas laukam@use-site:- lietošanas vietai, kad ir grūti precīzi norādīt mērķi
Piemērs izveidei un lietošanai:
// Anotācijas definīcija
@Retention(AnnotationRetention.RUNTIME)
annotation class MyAnnotation(val value: String)
// Anotācijas lietošana
@MyAnnotation("Hello")
class MyClass {
@get:MyAnnotation("World")
val myProperty: String = "kāda vērtība"
constructor(@param:MyAnnotation("ConstructorParam") param: Int) {
// ...
}
fun myFunction(@MyAnnotation("FunctionParam") param: String) {
// ...
}
}