Verbesserung
Top-Thema
Wichtig
Kleinigkeit
Wichtig
Verbesserung
Über TypedAnnotatable lassen sich dynamische Properties an Objekten speichern, vgl. TL/TypedAnnotatable.
Verbesserung
Properties mit Collection-Typ
- Property<List<T>> TypedAnnotatable.propertyList(...),
- Property<Set<T>> TypedAnnotatable.propertySet(...),
- Property<Map<K,V>> TypedAnnotatable.propertyMap(...),
Erzeugt Properties, die eine leere Collection als Default-Wert liefern. Wenn etwas in eine solche Collection gespeichert werden soll, muss man statt get(MY_LIST_PROPERTY) dann mkList(MY_LIST_PROPERTY) rufen, um eine veränderbare Liste zu erzeugen und unter dem Property zu speichern.
Properties mit dynamischem Default-Wert
Möchte man nicht bei Definition des Properties einen konstanten Default-Wert mitgeben, sondern den Default-Wert berechnen, kann man ein dynamisches Property erstellen:
#!java Property<String> MY_PROPERTY = TypedAnnotatable.propertyDynamic(String.class, "myProp", x -> computeDefault(x));
Als Argument erhält die Funktion das Objekt, an dem das Property nachgeschlagen werden soll, an welchem das Property aber noch nicht gesetzt wurde.
Code-Migration
- Statt den Constructor von TypedAnnotation.Property direkt aufzurufen, muss eine Factory-Methode TypedAnnotation.propertyXXX(...) genutzt werden.
Test
- test.com.top_logic.basic.col.AbstractTypedAnnotationTest.testDynamicDefault()
- test.com.top_logic.basic.col.AbstractTypedAnnotationTest.testListProperty()
- test.com.top_logic.basic.col.AbstractTypedAnnotationTest.testSetProperty()
- test.com.top_logic.basic.col.AbstractTypedAnnotationTest.testMapProperty()