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.