Πώς να χρησιμοποιήσετε τις σημειώσεις σε Kotlin;
sobes.tech AI
Απάντηση από AI
Οι annotations στο Kotlin χρησιμοποιούνται για την προσθήκη μεταπληροφοριών σε κλάσεις, ιδιότητες, συναρτήσεις, εκφράσεις και παραμέτρους. Δεν εκτελούν άμεση ενέργεια, αλλά μπορούν να χρησιμοποιηθούν από τον μεταγλωττιστή, πλαίσια ή άλλες βιβλιοθήκες για διάφορες επεξεργασίες.
Βασικές πτυχές χρήσης:
-
Σύνταξη: Οι annotations τοποθετούνται πριν από το στοιχείο στο οποίο εφαρμόζονται, σε γωνιαίες αγκύλες
@. Αν η annotation έχει παραμέτρους, αυτές καθορίζονται σε παρενθέσεις μετά το όνομα.@Deprecated("Use newFunction instead") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Εφαρμογή σε διάφορα στοιχεία: Οι annotations μπορούν να εφαρμοστούν σε:
- Κλάσεις (
class):@Serializable class User(val name: String) - Ιδιότητες (
val,var):@Inject lateinit var userRepository: UserRepository - Συναρτήσεις (
fun):@Test fun testSomething() { // ... } - Παραμέτρους κατασκευαστών/συναρτήσεων:
fun processUser(@NotNull user: User) { // ... } - Εκφράσεις:
fun calculate(@Ignore parameter: Int) { // ... } - Τύποι (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Κλάσεις (
-
Τοποθεσίες εφαρμογής (Use-site Targets): Για διαχωρισμό του σε ποιο στοιχείο εφαρμόζεται η annotation, όταν υπάρχουν πολλαπλά (π.χ., πεδίο και getter), χρησιμοποιούνται use-site targets.
Target Περιγραφή @file:Εφαρμόζεται σε ολόκληρο το αρχείο @property:Εφαρμόζεται σε ολόκληρη την ιδιότητα @field:Εφαρμόζεται στο backing field @get:Εφαρμόζεται στον getter της ιδιότητας @set:Εφαρμόζεται στον setter της ιδιότητας @param:Εφαρμόζεται στην παράμετρο του κατασκευαστή/συναρτήσεων @setparam:Εφαρμόζεται στην παράμετρο του setter @delegate:Εφαρμόζεται στην περίπτωση της ιδιότητας με διαχειριστή @receiver:Εφαρμόζεται στον τύπο του δέκτη class Example(@field:Inject val dependency: Dependency) { // @field:Inject εφαρμόζεται στο πεδίο 'dependency' } -
Ορισμός προσαρμοσμένων annotations: Οι δικές τους annotations δηλώνονται με τη λέξη-κλειδί
annotation class. Οι παράμετροι μπορούν να είναι primitive τύποι, συμβολοσειρές, κλάσεις (KClass), enum, άλλες annotations ή πίνακες αυτών.annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Hello", count = 5) class AnnotatedClass { // ... } -
Meta-annotations: Οι annotations μπορούν να επισημανθούν με meta-annotations που καθορίζουν τη συμπεριφορά και την εφαρμοσιμότητά τους.
@Target: Υποδεικνύει ποια στοιχεία μπορούν να annotate-θούν.@Retention: Υποδεικνύει σε ποιο στάδιο ζωής υπάρχει η annotation (SOURCE,BINARY,RUNTIME).@Repeatable: Επιτρέπει την επανάληψη της ίδιας annotation.@MustBeDocumented: Υποδεικνύει ότι η annotation πρέπει να είναι μέρος του δημόσιου API που παράγεται από εργαλεία τεκμηρίωσης.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Οι annotations χρησιμοποιούνται ευρέως στο Kotlin για ενσωμάτωση με πλαίσια JVM (Spring, Android), σειριοποίηση (Kotlinx.serialization), δοκιμές (JUnit) και δημιουργία δικών τους βιβλιοθηκών, βασισμένων σε μεταπληροφορίες.