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
null
ergibt. Nur diese beiden Annotationen können gleichzeitig gesetzt sein. Verstößt eine Property gegen diese Regeln, führt die Verwendung des betroffenenConfigurationItem
s zu einerException
. Genauer: Das Erstellen oder Einlesen eines solchenConfigurationItem
s schlägt fehl. Auch das Bauen desConfigurationDescriptor
s 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.