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:
- Integrierte Kompilierzeit-Konstanten:
@override,@deprecated - 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)