JavaRush /Блоги Java /Random-TG /Табдил додани Enum ба String

Табдил додани Enum ба String

Дар гурӯҳ нашр шудааст
Имрӯз мо дар бораи кор бо рӯйхатҳои сатр ва аниқтараш бо enumсинфҳое сӯҳбат хоҳем кард, ки мутақобиларо бо константаҳои сатр ташкил мекунанд. Табдил додани Enum ба сатр - 1

Истифодаи рақамҳои сатр

Ҳангоми таҳияи барнома, шумо бояд давра ба давра дар маҷмӯи собит арзишҳои сатр амал кунед. Он метавонад чизе бошад. Масалан, рӯйхати рамзҳои рангҳои аз ҷониби барнома дастгирӣшаванда ё рӯйхати дастгоҳҳое, ки замимаи мо бо онҳо ҳамкорӣ карда метавонад, фаслҳо ва ғайра. Њамаи ин маљмўи пешакї муќарраршудаи константањои сатри дорои сохтори умумист, ки бо онњо њамкории барномаро дар сатњи codeи Java муќаррар кардан лозим аст. Вақте ки ба шумо лозим меояд, ки бо маҷмӯи пешакӣ муайяншудаи сатр (ва дигар) доимӣ муошират кунед, беҳтарин роҳи ҳалли он ин навиштани enumсинфи шахсии шумост. Дар зер мо мисолҳои табдил enumба string.

Эҷоди рақамҳои сатр

Биёед enumсинферо эҷод кунем, ки рӯйхати муҳитҳои гуногунро барои ҷойгиркунии барнома ва инчунин URL-и ҳар як муҳит нигоҳ медорад:
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;
    }
}
Дар ин синф мо 4 муҳити зистро муайян кардем:
  • PROD- озод кардан
  • TEST— барои санчиши дастй
  • AUTO_TEST— муҳит барои санҷишҳои автоматӣ
  • DEV— маҳаллӣ барои таҳия ва ислоҳ
Ва инчунин 4 URL барои ҳар яке аз ин муҳитҳо. Биёед ба чанд нуктаи муҳим диққат диҳем.
  1. Ҳар як URL як сатри доимӣ дар рӯйхати мост: онҳо дар қавс дар паҳлӯи ҳар як enumдоимӣ муайян карда мешаванд.
  2. Бояд конструкторе бошад, ки аргументи як навъро бо ҳар як enumдоимӣ мегирад.
  3. Доираи конструктор privateё package private.
  4. Тағирёбанда - майдони синфро муайян кардан лозим аст, ки константаҳои сатри муайянкардаамонро нигоҳ медорад. Барои истифода бурдани арзишҳои доимии сатр, шумо бояд барои ин майдон як усули гетер эҷод кунед.

Итератсия аз болои рӯйхатҳои сатр

Дар ин марҳила, мо метавонем аллакай аз болои ҳамаи enumарзишҳои дастрас такрор кунем ва инчунин константаҳои сатри бо онҳо алоқамандро ба даст орем. Барои гирифтани ҳамаи арзишҳои ягон enumсинф, шумо бояд усули зеринро истифода баред values():
public class Main {
    public static void main(String[] args) {
        for (Environment env : Environment.values()) {
            System.out.println(env + " : " + env.getUrl());
        }
    }
}
Хулоса:

PROD : https://release.application.com/
TEST : https://test.application.com/
AUTO_TEST : https://autotest.application.com/
DEV : http://localhost:8080
Тавре ки аз мисол дида мешавад, барои чопи номи enumдоимӣ мо онро ба усули гузаронидем System.out.printlnва барои чопи url-и бо ин константа алоқаманд, мо гетереро, ки муайян карда будем, истифода бурдем.

Гирифтани доимии сатр аз enum

Барои ба даст овардани арзиши ягон доимии сатр, мо инчунин метавонем қабулкунандаро дар ҳама гуна 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);

    }
}
Хулоса:

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

Гирифтани доимии рақамҳо аз рӯи ном

enumБаъзан аз рӯи номи сатри он доимӣ гирифтан лозим меояд . Ин бо истифода аз метод анҷом дода мешавад valueOf(String), ки константаро бо номи худ бармегардонад:
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());

    }
}
Хулоса:

Production url is: https://release.application.com/
Development url is: http://localhost:8080
Аммо дар ин ҷо эҳтиёт лозим аст. Агар усул доимӣ бо номи нишондодашударо наёбад enum, истисно партофта мешавад java.lang.IllegalArgumentException.

Табдил додани сатр ба Enum

Баъзан зарурати баръакс ба миён меояд. Донистани арзиш enum, enumхуди доимиро гиред. Онхое. дар мисоли мо, донистани суроғаи муайян, шумо бояд Environmentдоимии мувофиқро гиред. Якчанд вариантҳо барои ин кор вуҷуд доранд. Ва ҳамаи онҳо такмor enumхуди синфро талаб мекунанд. Варианти 1. Барӯйхатгирӣ дар дохor синф. Шумо бояд усулеро эҷод кунед, ки сатрро қабул кунад ва онро бо тамоми арзишҳои enumсинф муқоиса кунад. Агар мувофиқат мавҷуд бошад, усул рақами дилхоҳро бармегардонад. Барои мисоли мо, мо бояд Environmentдар дохor синф усули зеринро эҷод кунем:
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 + "]");
}
Он гоҳ мо метавонем enumаз сатр чунин ба даст орем:
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);
    }
}
Хулоса:

Environment name for url=[http://localhost:8080] is: DEV
Ин равиш нуқсонҳои худро дорад. Ҳар дафъа, барои ба даст овардани enumяк доимӣ, шумо бояд тамоми арзишҳоро такрор кунед ва миқдори муайяни муқоисаҳоро анҷом диҳед. Ҷазои иҷроиш дар ин ҳолат аз рӯи шумораи константаҳо ва шумораи амалиёти шабеҳ муайян карда мешавад. Усули дуюми ҳалли ин мушкилот ин мушкилотро надорад. Рамзи пурраи Enumсинф:
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: Истифода HashMap Дар ин ҳолат, мо дар дохor рақами худ харита эҷод мекунем ва онро як маротиба дар вақти тартибдиҳӣ пур мекунем ва сипас арзишҳоро аз он мегирем:
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);
    }
}
Дар робита ба истифода, ҳарду вариантҳо якхелаанд:
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);
    }
}
Хулоса:

Environment name for url=[http://localhost:8080] is: DEV
Аммо ин усул камбудиҳо низ дорад. Аввалан, рамзи бештар вуҷуд дорад. Ва дуюм, HashMapҳама enumарзишҳо дар хотираи барнома ба таври доимӣ нигоҳ дошта мешаванд. Тавре ки шумо мебинед, ҳама чиз мусбат ва манфӣ дорад. Аммо бо назардошти он, ки enumдарсҳо одатан арзишҳои зиёд надоранд, камбудиҳо қариб ноаён хоҳанд буд. Огоҳӣ вуҷуд дорад: агар чунин амалиёт (гирифтани Java Enum аз рӯи арзиши сатр) зуд-зуд иҷро карда шавад, беҳтар аст, ки варианти дуюмро истифода баред. Шумо метавонед дар бораи ин мавзӯъ ва Enumумуман дарсҳо дар курси JavaRush маълумоти бештар гиред. EnumДонишҷӯён JavaRush-ро аллакай дар лексияи якуми сатҳи панҷум меомӯзанд . Табдил додани Enum ба сатр - 2
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION