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
verhalten sich anders:
null ergibt. Nur diese beiden Annotationen können gleichzeitig gesetzt sein. Verstößt eine Property gegen diese Regeln, führt die Verwendung des betroffenen ConfigurationItems zu einer Exception. Genauer: Das Erstellen oder Einlesen eines solchen ConfigurationItems schlägt fehl. Auch das Bauen des ConfigurationDescriptors für diesen Typ schlägt fehl.