Właściwości złożone
Właściwości złożone najłatwiej wytłumaczyć podając przykład. Załóżmy, że mamy klasę - kontener, w której jedna ze zdefiniowanych właściwości ma typ, który także jest kontenerem (implementuje interfejs IPropertyContainer
). Jej definicja w Javie może wyglądać następująco:
public class ParentPropertyContainer extends ClassPropertyContainer { ... @PropertyField(propertyName="A") private ChildPropertyContainer _propertyA; } public class ChildPropertyContainer extends ClassPropertyContainer { ... @PropertyField(propertyName="B") private int _propertyB; }
Nie używając złożonych właściwości, dostęp do właściwości "B" mógłby wyglądać następująco:
ParentPropertyContainer parent = new ParentPropertyContainer(); Property propertyA = parent.getProperty("A"); IPropertyContainer child = (IPropertyContainer)propertyA.getValue(); Property property = child.getProperty("B");
Metoda ta jest dosyć niewygodna, dlatego do platformy jAgE został wprowadzony nowy sposób dostępu do złożonych właściwości:
ParentPropertyContainer parent = new ParentPropertyContainer(); Property propertyB = parent.getProperty("A.B");
Nazwy poszczególnych właściwości są oddzielane kropką. W przypadku właściwości, których wartość jest tablicą kontenerów, możliwy jest także dostęp poszczególnych elementów tej tablicy:
pubilc class ArrayPropertyContainer extends ClassPropertyContainer { ... @PropertyField(propertyName="Children") private ChildPropertyContainer[] _childProperties; public Property getFirstChildBProperty() { return getProperty("Children0.B"); } };
Metoda getFirstChildBProperty
zwraca właściwość "B" pierwszego obiektu znajdującego się w tablicy, która jest przechowywana jako wartość właściwości "Children". Dostęp do poszczególnych elementów tablicy jest taki sam, jak w Javie - poprzez nawiasy kwadratowe po nazwie właściwości.