Hirdetés

Új hozzászólás Aktív témák

  • robisz
    senior tag

    Sziasztok
    Van egy kérdésem az enum típussal kapcsolatban:


    enum Day {
    SUNDAY (''Sunday''),
    MONDAY (''Monday''),
    TUESDAY (''Tuesday''),
    WEDNESDAY (''Wednesday''),
    THURSDAY (''Thursday''),
    FRIDAY (''Friday''),
    SATURDAY (''Saturday'');

    public final String dayname;

    Day(String dayname) {
    this.dayname = dayname;
    }
    public String toString(){
    return (this.dayname);
    }

    }


    Ez működik, meg használni is tudom. A kérdésem inkább elméleti jellegű:

    A constructor-nál nem világos a paraméter szerepe.
    ( Day(String dayname) )
    Hiszen így használom:


    Day day = day.SUNDAY;


    Akkor meg hogy kerül oda az a String dayname paraméter? Ez valami trükk, hogy a Java fordító az ilyen day.SUNDAY kifejezéseket átalakítja constructorhívássá, úgy hogy a SUNDAY-nak megfelelő szöveget (''Sunday''), odateszi paraméternek?
    Azt megfigyeltem, hogy a constructor-t csak a kellő számú, típusú és sorrendű paraméterrel lehet megírni.

    Persze használni kényelmes, de nem látom át, mi is történik itt valójában...

    Előre is köszönöm
    KL

    Szia!

    Az enum típusra úgy érdemes gondolni mint egy sima osztályra.
    Annyi a különbség, hogy ebből az osztályból közvetlenül sosem hozunk
    létre példányokat, csak az előre definiált ''konstansokat'' használhatjuk.

    A példában tehát létrejön egy Day ''osztály'' és annak a 7 példánya (SUNDAY,
    MONDAY, stb...)

    Legegyszerűbb formában tehát az enum így nézne ki:

    enum Day {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;
    }


    Mint minden sima osztályban az enum-ban is írhatunk metódusokat, tárolhatunk
    egyéb adatokat.
    Alapból a toString() metódus a konstans nevével megegyező string-et ad vissza,
    tehát a System.out.println(Day.MONDAY) eredménye ''MONDAY''.

    A te példádban az enum-ban tárolunk egy dayname string-et is. Itt jön be
    a képbe a konstruktor szerepe. Igaz te kivülről sosem hivod közvetlenül a
    konstruktor-t, de a SUNDAY(''Sunday'') sor az enumban valójában egy konstruktor
    hívást jelent, azaz a ''Sunday'' string eltárolodik a dayname változóba.

    A toString metódust is felüldefiniálódik a te példádban, mégpedig úgy, hogy ezt a
    dayname String-et adja vissza. Igy a System.out.println(Day.MONDAY) eredménye
    ''Monday'' lesz ''MONDAY'' helyett.

    Azt hogy milyen adatokat tárolsz az enum-ben és milyen konstruktorokat írsz
    te döntöd el, csak a konstansok felsorolásánal (SUNDAY, MONDAY stb) a megfelelő
    számú és típusú paramétert kell átadni.


    [Szerkesztve]

Új hozzászólás Aktív témák