hlmod.hu
https://hlmod.hu/

[Java] Getterek és setterek
https://hlmod.hu/viewtopic.php?f=127&t=28820
Oldal: 1 / 1

Szerző:  Silent [ 2018.03.10. 11:50 ]
Hozzászólás témája:  [Java] Getterek és setterek

Sziasztok!

Csak felfrissülésül, az előző leckében már volt egy Dog osztályunk, amit tudtunk az általunk írt konstruktor meghívásával példányosítani, majd azt is megnéztük, hogy a toString metódust hogyan lehet felülírni, hogy egy custom szöveget adjon vissza értékül.

Feltűnhetett azonban, hogy az osztály fieldjei alaphelyzetben (szándékosan így csináltam), private modifier-rel rendelkeznek. Ezeket mint már korábban megtanultuk, nem tudjuk kívülről elérni, tehát a Main classban nem tudjuk egyesével lekérdezni az objektumunk tulajdonságait.

Erre egy nagyon elterjedt módszert használunk, amiket gettereknek és settereknek hívunk. Alapjáraton a getter egy olyan metódus, mely úgy kezdődik, hogy get, majd a lekérdezendő field neve camel case-el. Paramétert nem vár el, alapesetben visszaadja a tulajdonságot.
Tehát:
Ha van egy private String color; property, akkor a getterünk neve getColor() lesz.

Kódbeli implementáció:

Kód:
public String getColor() {
   return color;
}


A setter pedig hasonlóképp épül fel, set-tel kezdődik, majd a tulajdonság neve. Paraméterül az új értéket várja el, a függvénytörzsben pedig a tulajdonságot beállítja az új értékre.

Pl.:

Kód:
public void setColor(final String color) {
   this.color = color;
}


Miért használjuk ezeket? Miért nem egyszerűbb public modifierrel ellátni a fieldeket? Meg lehet azt is csinálni persze, főleg könnyebb adatszerkezetű osztályoknál (pl. egy nagy restes alkalmazásnál egy DTO), azonban gondoljunk bele mennyi minden pluszt ad nekünk egy setter. Tegyük fel, hogy van egy olyan fieldünk, amelyik az illető életkorát tárolja el. Alapesetben ezt bármikor be lehet állítani 0-ra is, vagy akár minusz értékre. Viszont ha egy settert használunk, ami már egy függvény, akkor validálhatjuk a beállított értéket, így ha valaki 0-ra próbálja beállítani az életkorát, akkor akár jelezhetjük felé, hogy ezt próbálja újra, mert 0 éves ember nem lehet. Leegyszerűsítve, logikát tudunk csempészni az értékadásnál, valamint az érték kérésnél is.


Amennyiben te is Intellij IDEA-t használsz, van lehetőséget automatán legenerálni a getter / setter metódusokat, sőt, engedi is kiválasztani, hogy melyik fieldekhez akarsz generálni.

Ehhez kattints jobb klikkel a kódba, ahová generálni akarod őket, majd válaszd ki a Generate... pontot (Mac shortcut: OPTION + N), majd a Getters / setters pontot.

Ha mindent jól csináltál, felugrik egy ilyen ablak:

Kép

Itt kiválasztod a fieldeket, majd leokoézod az ablakot. Ha minden igaz, le lesznek generálva a getterek és setterek.

Nézzünk egy példát, ahol a Main osztályban egy létrehozott kutyának kiíratjuk a bundája színét:

Kód:
public class Main {

    public static void main(String[] args) {

        Dog enzo = new Dog("Enzo", 2, "szürke");
        System.out.println("A kutya bundájának színe: " + enzo.getColor());

    }
}


Eredmény: A kutya bundájának színe: szürke


Ennyit a getter / setterekről, következő leckében beszélünk az osztályok közötti öröklődésről.

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/