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. 

Weitere Annotationen

Der Default-Wert einer Property kann entsprechend des Typs des Properties über eine der folgenden Annotationen bestimmt werden:

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();
}