Default-Werte
Es besteht die Möglichkeit, einen Default Wert für eine Property anzugeben. Dafür muss man an das entsprechende Property eine Konstante annotieren.
public interface Config extends ConfigurationItem {
@IntDefault(17)
int getOption();
}
Wenn dann aus einer unausgefüllten XML-Datei
<config option=""/>
eine neue Instanz der Konfiguration Config
erstellt wird, liefert der Aufruf von getOption()
den Wert 17
zurück.
Je nach Typ (primitiv oder Objekttyp), gibt es verschiedene Annotationen für die Eigenschaft:
Primitiv | Objekttyp | Default-Wert (siehe Nullable-Annotationen) |
Default-Annotationen | ||||
---|---|---|---|---|---|---|---|
boolean |
Boolean |
false |
@BooleanDefault |
||||
char |
Character |
@CharDefault |
|||||
byte |
Byte |
0 |
@ByteDefault |
||||
short |
Short |
0 |
@ShortDefault |
||||
int |
Integer |
0 |
@IntDefault |
||||
long |
Long |
0 |
@LongDefault |
||||
float |
Float |
0.0 |
@FloatDefault |
||||
double |
Double |
0.0 |
@DoubleDefault |
||||
String |
"" |
@StringDefault |
|||||
Class |
@ClassDefault |
||||||
Enum |
erster Eintrag | @ComplexDefault | |||||
Klasse | null |
@ComplexDefault,@InstanceDefault ,@FormattedDefault ,@ItemDefault |
|||||
Konfiguration | ConfigurationItem |
null |
@FormattedDefault ,@ItemDefault |
||||
PolymorphicConfiguration |
@ImplementationClassDefault |
Für weiterführende Informationen siehe Links in der Tabelle oben und die Abschnitte unten.
Default Werte für Unterkonfigurationen
Der Default @ItemDefault
kann für Properties genutzt werden, die eine Unterkonfiguration beschreiben. Statt dem null
Default erhält das Property eine Instanz seines Konfigurationtyps oder des in der Annotation angegebenen Konfigurationstyps, der ein Untertyp des Konfigurationstyps des Properties sein muss.
@ItemDefault
: Der Default ist eine Instanz des deklarierten Konfigurationsinterface Typs.@ItemDefault(MyConfig.class)
undMyConfig
ist ein Konfigurationsinterface: Der Default ist eine Instanz vonMyConfig
.@ItemDefault(MyImpl.class)
undMyImpl
ist kein Konfigurationsinterface: Der Default ist einePolymorphicConfiguration
mitMyImpl.class
als Implementierungsklasse (siehe auch#22219).
Weitere Annotationen
Der Default-Wert einer Property kann entsprechend des Typs des Properties über eine der folgenden Annotationen bestimmt werden:
@NullDefault
: Der Default-Wert istnull
und das Property wird implizit mit @Nullable annotiert.@ClassDefault
: Das Property muss vom TypClass
sein und bekommt die annotierte Klasse als Default.@InstanceDefault
: Die annotierte Klasse wird instanziert. Eventuell muss man dafür auchInstanceFormat
annotieren (siehe Instanzen als Konfigurationswerte).@FormattedDefault
: Ist an der Property ein Format annotiert, wird der Default-Wert in der Annotation als String-Wert im gleichen Format angegeben.@Format(CommaSeparatedStrings.class) @FormattedDefault("orange,apple,banana") List<String> getFruits();
@ItemDefault
: Das Property hat selbst einen Konfigurationstyp. Statt demnull
Default erhält das Property eine Instanz seines Konfigurationtyps oder des in der Annotation angegebenen Konfigurationstyps, der ein Untertyp des Konfigurationstyps des Properties sein muss.@ImplementationClassDefault
: Für Properties vom TypPolymorphicConfiguration
. Setzt für das PropertyPolymorphicConfiguration.getImplementationClass()
die gegebene Klasse als Default. Wenn es ohneItemDefault
verwendet wird, ist diePolymorphicConfiguration
aber per Default trotzdemnull
. Nur wenn das Property in der Konfiguration erwähnt wird, hatImplementationClassDefault
einen Effekt. Daher wirdImplementationClassDefault
häufig zusammen mitItemDefault
verwendet.
@ItemDefault @ImplementationClassDefault(SportCar.class) PolymorphicConfiguration<? extends Car<?>> getCar();
Spezialfall: Implementierungsklasse einer PolymorphicConfiguration
Der Default-Wert für das spezielle Konfigurationsproperty class
in PolymorphicConfiguration
wird neben der Methode über @ClassDefault
(siehe oben) über den Typ-Parameter T
des Konfigurationsinterfaces PolymorphicConfiguration<T>
angegeben. Dieser Typ-Parameter bezeichnet den statischen Typ der Implementierungsklasse, welche bei der Instanziierung der Konfiguration erzeugt werden soll.
Die Default-Implementierungsklasse der folgenden Konfiguration ist die Klasse A
, ohne dies explizit an das (geerbte) Konfigurationsproperty class
zu annotieren.
public interface Config extends PolymorphicConfiguration<A> {
...
}
Diese Deklaration ist äquivalent mit:
public interface Config extends PolymorphicConfiguration<Object> {
@Override
@ClassDefault(A.class)
Class<? extends A> getImplementationClass();
}