Metadaten

Was sind Metadaten-Annotationen?

Sie beginnen mit @ und hängen statische Zusatzinformationen an Code an. Compiler, IDE und statische Analysewerkzeuge lesen diese, sie beeinflussen die Laufzeitlogik nicht.

Zwei gültige Schreibweisen:

  1. Integrierte Kompilierzeit-Konstanten: @override, @deprecated
  2. Aufrufe konstanter Konstruktoren: @Deprecated("Hinweistext"), eigene Annotationen wie @Todo("xxx", "xxx")

Werden üblicherweise bei Klassen, Methoden, Variablen, Funktionen, Parametern, Imports, Enums usw. verwendet.

@Deprecated

Markiert veraltete APIs. Ersatzlösung und Entfernungsdatum müssen angegeben werden. Es gibt zudem statische Methoden für eingeschränkte Szenarien.

class Television {
  /// Alternative: Nutze turnOn
  @Deprecated('Bitte nutze stattdessen turnOn(). Diese Methode wird Ende 2026 entfernt')
  void activate() {
    turnOn();
  }

  void turnOn() {
    print("Fernseher eingeschaltet");
  }
}

// Beispiele für spezielle Veralterungsbeschränkungen
@Deprecated.instantiate() // Verhindert Instanziierung mit new
class OldDevice {}

@Deprecated.extend() // Verhindert das Erben von dieser Klasse
class Base {}

// Versuch, Base zu erben löst Warnungen im Editor aus
class Sub extends Base {}

void main() {
  Television tv = Television();
  // Aufruf der @Deprecated-Methode zeigt Durchstreichung + IDE-Warnungen
  tv.activate();
  // Empfohlene neue Methode
  tv.turnOn();

  // Instanziierung von OldDevice löst @Deprecated.instantiate()-Warnung aus
  OldDevice device = OldDevice();
}
Code-Sprache: Dart (dart)

Der obige Code lässt sich normal kompilieren und ausführen, nur im IDE und Compiler erscheinen Warnungen. Testen Sie es mit Android Studio oder IntelliJ IDEA.

@deprecated

Ohne individuellen Hinweis, einfache Veralterungsmarkierung. Bevorzuge @Deprecated("Beschreibung")

@deprecated
void oldFunc() {}
Code-Sprache: Dart (dart)

@override

Markiert Mitglieder, die gleichnamige Elemente der Oberklasse / Schnittstelle überschreiben. Die IDE prüft: Falsch geschriebene Methodennamen werden rot markiert.

class Animal {
  void speak() {}
}

class Dog extends Animal {
  // @override kennzeichnet das Überschreiben der Elternmethode speak
  @override
  void speak() {
    print("Wau wau");
  }
}

class Cat extends Animal {
  @override
  void speak() {
    print("Miau");
  }
}

class Pig extends Animal {
   // Keine Überschreibung
}

void main() {
  Animal dog = Dog();
  Animal cat = Cat();
  Animal pig = Pig();

  dog.speak(); // Ausgabe: Wau wau
  cat.speak(); // Ausgabe: Miau
  pig.speak();
}
Code-Sprache: Dart (dart)

@pragma

Übermittelt Lowlevel-Optimierungs- / Erkennungsanweisungen an Compiler und statische Analysewerkzeuge, hauptsächlich für Systementwicklung.

// Beispiel: Compiler anweisen, diese Funktion zu inlineen
@pragma('vm:prefer-inline')
int add(int a, int b) => a + b;
Code-Sprache: Dart (dart)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert