Sobes.tech
Junior

Πώς να χρησιμοποιήσετε τις σημειώσεις σε Kotlin;

sobes.tech AI

Απάντηση από AI

Οι annotations στο Kotlin χρησιμοποιούνται για την προσθήκη μεταπληροφοριών σε κλάσεις, ιδιότητες, συναρτήσεις, εκφράσεις και παραμέτρους. Δεν εκτελούν άμεση ενέργεια, αλλά μπορούν να χρησιμοποιηθούν από τον μεταγλωττιστή, πλαίσια ή άλλες βιβλιοθήκες για διάφορες επεξεργασίες.

Βασικές πτυχές χρήσης:

  1. Σύνταξη: Οι annotations τοποθετούνται πριν από το στοιχείο στο οποίο εφαρμόζονται, σε γωνιαίες αγκύλες @. Αν η annotation έχει παραμέτρους, αυτές καθορίζονται σε παρενθέσεις μετά το όνομα.

    @Deprecated("Use newFunction instead")
    fun oldFunction() {
        // ...
    }
    
    @JvmStatic
    fun staticMethod() {
        // ...
    }
    
  2. Εφαρμογή σε διάφορα στοιχεία: Οι 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()
      
  3. Τοποθεσίες εφαρμογής (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'
    }
    
  4. Ορισμός προσαρμοσμένων annotations: Οι δικές τους annotations δηλώνονται με τη λέξη-κλειδί annotation class. Οι παράμετροι μπορούν να είναι primitive τύποι, συμβολοσειρές, κλάσεις (KClass), enum, άλλες annotations ή πίνακες αυτών.

    annotation class MyAnnotation(val value: String, val count: Int = 0)
    
    @MyAnnotation("Hello", count = 5)
    class AnnotatedClass {
        // ...
    }
    
  5. 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) και δημιουργία δικών τους βιβλιοθηκών, βασισμένων σε μεταπληροφορίες.