JavaRush /Java Blog /Random-TK /Enumy setire öwürmek

Enumy setire öwürmek

Toparda çap edildi
enumBu gün setir sanlary bilen işlemek, has takygy, yzygiderli yzygiderlilik bilen özara gatnaşygy gurnaýan sapaklar bilen gürleşeris .Enumy setire öwürmek - 1

Setir sanlaryny ulanmak

Programmany işläp düzmekde, belli bir setir bahalarynyň toplumynda işlemeli. Islendik zat bolup biler. Mysal üçin, programma tarapyndan goldanýan reňk kodlarynyň sanawy ýa-da programmamyzyň täsirleşip bilýän enjamlarynyň sanawy, pasyllar we ş.m. Bularyň hemmesi umumy gurluşly, Java kod derejesinde programma täsirini ýola goýmak zerur bolan öňünden kesgitlenen setir yzygiderliligi. Öňünden kesgitlenen setir (we beýleki) yzygiderlilik bilen täsirleşmeli bolanyňyzda, iň oňat çözgüt, öz synpyňyzy ýazmakdyr enum. enumAşakda öwrülmegiň mysallaryna serederis string.

Setir sanlaryny döretmek

enumProgrammany ýerleşdirmek üçin dürli gurşawyň sanawyny, şeýle hem her gurşawyň URL-ni saklaýan synp döredeliň :
public enum Environment {
    PROD("https://release.application.com/"),
    TEST("https://test.application.com/"),
    AUTO_TEST("https://autotest.application.com/"),
    DEV("http://localhost:8080");

    private final String url;

    Environment(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }
}
Bu synpda 4 gurşawy kesgitledik:
  • PROD- boşatmak
  • TEST- el bilen synag etmek üçin
  • AUTO_TEST- awtotestler üçin gurşaw
  • DEV- ösüş we düzediş üçin ýerli
Şeýle hem bu gurşawlaryň her biri üçin 4 URL. Geliň, käbir möhüm nokatlara üns bereliň.
  1. Her URL, sanamagymyzda yzygiderli üýtgewsizdir: olar her enumüýtgewsiziň gapdalyndaky gabygyň içinde kesgitlenýär.
  2. Her üýtgewsiz bilen birmeňzeş jedeli alýan konstruktor bolmaly enum.
  3. Konstruktoryň gerimi privatehem package private.
  4. Üýtgeýjini kesgitlemek zerur - kesgitlän setir yzygiderliligimizi saklaýan synp meýdançasy. Setir yzygiderliliginiň bahalaryny daşardan ulanmak üçin bu ugur üçin has gowy usul döretmeli.

Setir sanamagyň üstünde gaýtalamak

Bu etapda, bar bolan bahalaryň üstünden eýýäm gaýtalap bileris enum, şeýle hem olar bilen baglanyşykly yzygiderli yzygiderliligi alyp bileris. Islendik synpyň ähli gymmatlyklaryny almak üçin enumusuly ulanmaly values():
public class Main {
    public static void main(String[] args) {
        for (Environment env : Environment.values()) {
            System.out.println(env + " : " + env.getUrl());
        }
    }
}
Netije:

PROD : https://release.application.com/
TEST : https://test.application.com/
AUTO_TEST : https://autotest.application.com/
DEV : http://localhost:8080
Mysaldan görnüşi ýaly, enumhemişelik adyny çap etmek üçin ony usula geçirdik System.out.printlnwe bu hemişelik bilen baglanyşykly url-y çap etmek üçin kesgitleýjimizi ulanýardyk.

Enumdan yzygiderli setir almak

Islendik setir üýtgewsiziniň bahasyny almak üçin, islendik üýtgeýjä hem jaň edip bileris enum:
public class Main {
    public static void main(String[] args) {

        String prodUrl = Environment.PROD.getUrl();
        String devUrl = Environment.DEV.getUrl();

        System.out.println("Production url is: " + prodUrl);
        System.out.println("Development url is: " + devUrl);

    }
}
Netije:

Production url is: https://release.application.com/
Development url is: http://localhost:8080

Adyny yzygiderli almak

enumKäwagt setir ady bilen hemişelik almak zerur . valueOf(String)Bu , ady bilen hemişelik gaýtaryp berýän usul bilen amala aşyrylýar :
public class Main {
    public static void main(String[] args) {

        Environment prod = Environment.valueOf("PROD");
        Environment dev = Environment.valueOf("DEV");

        System.out.println("Production url is: " + prod.getUrl());
        System.out.println("Development url is: " + dev.getUrl());

    }
}
Netije:

Production url is: https://release.application.com/
Development url is: http://localhost:8080
Emma bu ýerde seresaplylyk gerek. Usul görkezilen at bilen hemişelik tapmasa enum, kadadan çykma bolar java.lang.IllegalArgumentException.

Setiri Enuma öwürmek

Käwagt ters zerurlyk ýüze çykýar. Gymmatlygyny bilip enum, enumhemişelik özüni alyň. Bular. mysalymyzda, belli bir adresi bilip, degişli hemişelik almaly Environment. Munuň üçin birnäçe wariant bar. Bularyň hemmesi enumsynpyň özünde kämilleşmegi talap edýär. Wariant 1. Synpyň içinde sanamak. enumBir setiri kabul edip, synpyň ähli gymmatlyklary bilen deňeşdirjek usul döretmeli . Gabat gelýän bolsa, usul islenýän sanlary yzyna getirer. Mysal üçin, Environmentsynpyň içinde aşakdaky usuly döretmeli:
public static Environment getEnvByUrl(String url) {
    for (Environment env : values()) {
        // либо equalsIgnoreCase, на ваше усмотрение
        if (env.getUrl().equals(url)) {
            return env;
        }
    }

    // Либо просто вернуть null
    throw new IllegalArgumentException("No enum found with url: [" + url + "]");
}
enumSoňra şeýle setirden alyp bileris :
public class Main {
    public static void main(String[] args) {
        String url = "http://localhost:8080";
        Environment env = Environment.getEnvByUrl(url);

        System.out.println("Environment name for url=[" + url + "] is: " + env);
    }
}
Netije:

Environment name for url=[http://localhost:8080] is: DEV
Bu çemeleşmäniň zyýanly taraplary bar. Her gezek enumüýtgewsiz bolmak üçin ähli gymmatlyklary gaýtalamaly we belli bir mukdarda deňeşdirmeli bolarsyňyz. Bu ýagdaýda ýerine ýetiriş jezasy yzygiderli sany we şuňa meňzeş amallaryň sany bilen kesgitlener. Bu meseläni çözmegiň ikinji usulynda bu mesele ýok. Doly Enumsynp kody:
public enum Environment {

    PROD("https://release.application.com/"),
    TEST("https://test.application.com/"),
    AUTO_TEST("https://autotest.application.com/"),
    DEV("http://localhost:8080");

    private final String url;

    Environment(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }

    public static Environment getEnvByUrl(String url) {
        for (Environment env : values()) {
            if (env.getUrl().equals(url)) {
                return env;
            }
        }
        throw new IllegalArgumentException("No enum found with url: [" + url + "]");
    }
}
2-nji wariant: Ulanyş HashMap Bu ýagdaýda, öz sanawymyzyň içinde karta döredýäris we ony bir gezek jemläris, soňra bolsa bahalary alarys:
public enum Environment {

    PROD("https://release.application.com/"),
    TEST("https://test.application.com/"),
    AUTO_TEST("https://autotest.application.com/"),
    DEV("http://localhost:8080");

    private final String url;

    Environment(String url) {
        this.url = url;
    }

    public String getUrl() {
        return url;
    }

    // Создаем static final карту
    private static final Map<String, Environment> LOOKUP_MAP = new HashMap<>();

    // Заполняем её всеми значениями
    static {
        for (Environment env : values()) {
            LOOKUP_MAP.put(env.getUrl(), env);
        }
    }

    // Возвращаем Environment по строковому url
    public static Environment getEnvByUrl(String url) {
        return LOOKUP_MAP.get(url);
    }
}
Ulanyş nukdaýnazaryndan iki wariant hem birmeňzeş:
public class Main {
    public static void main(String[] args) {
        String url = "http://localhost:8080";
        Environment env = Environment.getEnvByUrl(url);

        System.out.println("Environment name for url=[" + url + "] is: " + env);
    }
}
Netije:

Environment name for url=[http://localhost:8080] is: DEV
Emma bu usulyň hem kemçilikleri bar. Birinjiden, has köp kod bar. Ikinjiden, HashMapähli enumbahalar programma ýadynda hemişelik saklanar. Görşüňiz ýaly, hemme zadyň gowy we erbet taraplary bar. Classesöne sapaklaryň adatça kän bir gymmatlyk saklamaýandygyny göz öňünde tutsak enum, kemçilikleri görünmeýär diýen ýaly. Üns beriň: eger şeýle amal (Java Enum-y String gymmaty bilen almak) ýygy-ýygydan ýerine ýetirilse, ikinji warianty ulanmak has gowudyr. Bu mowzuk we Enumumuman sapaklar barada JavaRush kursynda öwrenip bilersiňiz. Talyplar JavaRush-y Enumeýýäm bäşinji derejäniň birinji leksiýasynda öwrenýärler . Enumy setire öwürmek - 2
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION