Berechnete Properties

Man kann den Wert einer Property aus den Werten anderer Properties berechnen, z.B.

@Derived(fun = FullName.class, args = { @Ref(FIRST_NAME), @Ref(LAST_NAME) })
String getFullName();

wo die Klasse FullName eine passende Ableitung von GenericFunction ist, die aus den per @Ref referenzierten Properties den vollen Namen berechnet, der dann als Rückgabewert der Property dient, z.B.

public class FullName extends Function2<String, String, String> {
  @Override
  public String apply(String firstName, String lastName) {
    return firstName + " " + lastName;
  }
}

Die Annotation @Ref ermöglich auch, die Properties anderer Konfigurationen über Pfade zu referenzieren, z.B.

@Derived(fun = FullName.class, args = { @Ref({ PARENT, Parent.FIRST_NAME }), @Ref({ PARENT, Parent.LAST_NAME })})
String getParentFullName();

wo PARENT der Name der Container-Property ist (siehe Container-Annotation). Zugleich ist diese Art von Referenz dafür zuständig, dass spätestens beim Aufrufen des Getters der aktuelle Wert der referenzierten Property geholt wird. Der Pfad besteht aus einer Liste der Konfigurationen, über die zu der Property navigiert wird. Dabei muss man beachten:

  • Die Konfiguration-wertige Properties müssen genau den Typ haben, der die im Pfad nachfolgende Property deklariert.
  • Es ist nicht möglich über den Pfad auf die eigene Konfiguration zu referenzieren.
  • Referenziert man eine ganze Konfiguration, so wird der Wert des Getters bei einer Änderung deren Properties nicht aktualisiert, sondern erst wenn die gesamte referenzierte Konfiguration ausgetauscht wird.