Annotationen
Man unterscheidet lokale und geerbte Annotationen: leitet z.B. die Konfiguration
public interface CarForSaleConfig extends CarConfig {
@Override
@Mandatory
int getHorsePower();
@Name("price")
@Mandatory
double getPrice();
}
von
public interface CarConfig extends ConfigurationItem {
@Name("hp")
int getHorsePower();
@Name("color")
String getColor();
}
ab, so ist die @Name-Annotation an der Eigenschaft price lokal, während die @Name-Annotation an der Eigenschaft hp geerbt ist.
Wie man im obigen Beispiel sieht, darf eine Eigenschaft prinzipiell mehrere Annotationen kombinieren. Die Wertannotationen
- Defaultwert
- Container
- Derived
- Mandatory
- Abstract
verhalten sich anders:
- Jede Property darf nur eine lokale Wertannotation haben. Ausnahme: Die Property darf gleichzeitig eine Defaultwert-Annotation und eine Derived-Annotation haben. In diesem Fall wird der Default-Wert genommen, wenn der Derived-Ausdruck
nullergibt. Nur diese beiden Annotationen können gleichzeitig gesetzt sein. Verstößt eine Property gegen diese Regeln, führt die Verwendung des betroffenenConfigurationItems zu einerException. Genauer: Das Erstellen oder Einlesen eines solchenConfigurationItems schlägt fehl. Auch das Bauen desConfigurationDescriptors für diesen Typ schlägt fehl. - Jede Property darf beliebig viele Wertannotationen erben. Erbt eine Property mehrere Annotationen, wird die obige Priorisierung verwendet. Hierbei kann sich eine Defaultwert-Annotation mit einer Derived-Annotation ergänzen.
- Wenn eine Property eine oder mehrere Wertannotationen erbt und zusätzlich eine lokale Wertannotation hat, gewinnt die lokale Wertannotation. Hierbei kann eine lokale Defaultwert-Annotation aber durch eine geerbte Derived-Annotation ergänzt werden und umgekehrt.