Keresés

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

  • Szmeby

    tag

    válasz plaschil #6108 üzenetére

    Amikor enumot csinálsz, nyugodtan tekintsd őket konstansnak. Vagyis a legtöbb esetben felesleges mellé static final cuccokat definiálni, azok simán elvannak az enum obejktumon belül is. Pl. a KapacitasTipus-ban.
    Vagy eleve a double értékeket adod be a konstruktornak (0.5 és 1.0), vagy ha ragaszkodsz az egész számokhoz is, akkor a konstruktorban elosztod százzal. Így a getter sokkal egyszerűbb lesz, megszűnik a felesleges komplexitás (if).

    Valami ilyesmi módon:

    public enum KapacitasTipus {
    M0(100), M10(50);
    private final int kapacitasTipus;
    private final double ertek;
    private KapacitasTipus(int tipus) {
    this.kapacitasTipus = tipus;
    this.ertek = tipus / 100.0;
    }
    public int getKapacitasTipus() {
    return this.kapacitasTipus;
    }
    public double getKapacitasTipusErtek() {
    return this.ertek;
    }
    }

    De akár második konstruktor argumentumként is belőhető a másik szám, ha erre tényleg szükség van.

    Ami a komplexitást illeti, amikor gigászi if-else vagy switch-case füzéreket látsz, akkor érdemes elgondolkodni azon, hogy talán nem a legjobb helyen vannak. Gondolok itt a Szerzodes.createList() metódusra, ahol egy stringből enum objektumot készítenél. Szerencsére erre létezik az enumban beépített metódus:

    pkod = PontKod.valueOf(kod);
    ...
    ktipus = KapacitasTipus.valueOf(kapacitastipus);

    Amit tudni érdemes róla, hogy exception-t dob, ha olyan stringet kap, amihez nem talál enum példányt. Ha szükséges, ezt ajánlott lekezelni egy try-catch-ben.
    A PontKod átalakításával még átláthatóbb kódod lesz.

    Az enumnak van még pár hasznos beépített metódusa (name(), ordinal(), values()), érdemes őket megismerni.

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