AgE 2.4 : WlasciwosciZlozone

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.