Java dla Testerów 16. Gettery i settery: typy proste i String

Gettery i settery są metodami pozwalającymi na pobranie lub zmianę wartości prywatnego pola klasy z zewnątrz. Dzisiaj zobaczysz jak tworzyć gettery i settery i zobaczysz ich działanie na przykładzie typów prostych oraz tekstu czyli obiektów klasy String.

Gettery i settery – linki i materiały

poprzedniej lekcji wspominałam o hermetyzacji (inaczej enkapsulacji), które jest jednym z założeń programowania obiektowego. Polega na tym, że staramy się ukrywać metody, pola klasy i np. konstruktory klasy przed innymi klasami i udostępniać je tylko wtedy, kiedy wyraźnie i świadomie tego chcemy. Z tego powodu nie ustawiamy wszystkich metod i pól w klasie na public. Właściwie wszystko powinno być prywatne, dopóki wyraźnie nie powiemy, że w danym przypadku chcemy innej widoczności.

Gettery i settery a hermetyzacja

Można powiedzieć, że gettery i settery w pewien sposób realizują wspomniane wyżej założenie. Pola klasy powinniśmy ustawiać na prywatne i dopiero w razie konieczności udostępniać pobieranie wartości pola albo jego ustawianie za pomocą konkretnych metod. Tymi metodami są właśnie wspomniane gettery (akcesory) i settery (mutatory). Możemy zdecydować się tylko na jedną z tych metod, np. tylko na gettera. W takim wypadku będziemy mogli pobrać z zewnątrz wartość pola ale ze względu na brak settera, nie będziemy mogli zmienić jego wartości. Takiego efektu nie udało by się nam uzyskać zwykłym modyfikatorem dostępu na polu. Modyfikator dostępu dla pola dotyczył by zarówno operacji pobrania wartości pola jak i jego zmiany.

Getter

Getter to metoda, która umożliwia pobranie wartości prywatnego pola z zewnątrz. Popatrz na poniższą klasę Customer.

public class Customer {

    private String name;
    private String lastName;
    private int age;

    public int getAge() {
        return age;
    }
}

Ta klasa ma same prywatne pola i jedną metodę: getAge(). Metoda ta jest publiczna i nie robi nic więcej jak zwraca wartość prywatnego pola. Dzięki tej metodzie możemy się dobrać do wartości tego pola z innej klasy mimo, że to pole jest prywatne.

public class Tests {
    @Test
    public void gettersAndSettersTest(){
        Customer customer = new Customer();
        int age = customer.getAge();
    }
}

Getter zawsze będzie coś zwracał, więc musimy pamiętać, żeby przed nazwą tej metody podać typ zwracany.

Setter

Setter to metoda, która pozwala na zmianę wartości prywatnego pola klasy z zewnątrz tej klasy. Po dodaniu settera do naszej klasy wygląda ona tak:

public class Customer {

    private String name;
    private String lastName;
    private int age;

    public void setAge(int ageParameter) {        
        age = ageParameter;
    }

    public int getAge() {
        return age;
    }
}

Ta metoda ustawia wartość, a więc nie ma typu zwracanego, zamiast tego podajemy słówko void. Musimy natomiast dodać w tej metodzie parametr, a wewnątrz metody przekazać go do naszego pola. W ten sposób dokonamy zmiany wartości pola. Użycie takiej metody może wyglądać jak poniżej:

public class Tests {
    @Test
    public void gettersAndSettersTest(){
        Customer customer = new Customer();
        int age = 15;
        customer.setAge(age);        
        System.out.println(customer.getAge());
    }
}

Dodatkowe operacje

W getterach i setterach możemy dorzucić coś ekstra. Czyli metody te mogą robić coś więcej niż jedynie przypisywać nową wartość polu i pobierać wartość tego pola. Na filmie pokazuję na przykład jak dodać walidację w setterze na przykładzie wieku, który nie może być ujemny. Pokazuję także gettera, który modyfikuje wartość przed jej zwróceniem.