JavaRush /جاوا بلاگ /Random-SD /Enum کي اسٽرنگ ۾ تبديل ڪرڻ

Enum کي اسٽرنگ ۾ تبديل ڪرڻ

گروپ ۾ شايع ٿيل
اڄ اسان ڪم ڪرڻ جي باري ۾ ڳالهائينداسين اسٽرنگ انگن اکرن سان، ۽ خاص طور تي، انهن enumطبقن سان جيڪي اسٽرنگ مستقل سان رابطي کي منظم ڪن ٿا. Enum کي اسٽرنگ ۾ تبديل ڪرڻ - 1

String Enumerations استعمال ڪندي

ايپليڪيشن ڊولپمينٽ دوران، توهان کي وقتي طور تي اسٽرنگ ويلز جي مقرر ڪيل سيٽ تي هلائڻ جي ضرورت آهي. اهو ڪجهه به ٿي سگهي ٿو. مثال طور، ايپليڪيشن پاران سپورٽ ڪيل رنگن جي ڪوڊن جي هڪ فهرست، يا ڊوائيسز جي هڪ فهرست جنهن سان اسان جي ائپليڪيشن سان رابطو ڪري سگهي ٿي، موسم، وغيره. هي سڀ هڪ عام ڍانچي سان string constants جو اڳواٽ بيان ڪيل سيٽ آهي، جنهن سان جاوا ڪوڊ جي سطح تي پروگرام جي رابطي کي قائم ڪرڻ ضروري آهي. جڏهن توهان کي اسٽرنگ جي اڳواٽ مقرر ڪيل سيٽ سان رابطو ڪرڻ جي ضرورت آهي (۽ ٻيا) مستقل، بهترين حل توهان جي پنهنجي 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 URLs. اچو ته ڪجهه اهم نقطن تي ڌيان ڏيو.
  1. هر يو آر ايل اسان جي ڳڻپ ۾ هڪ اسٽرنگ مستقل آهي: اهي هر مستقل جي اڳيان قوس ۾ بيان ڪيا ويا آهن enum.
  2. اتي ھڪڙو ٺاھيندڙ ھجڻ گھرجي جيڪو ھڪڙي قسم جو ھڪڙو دليل وٺندو آھي جيئن ھر enumمستقل.
  3. تعمير ڪندڙ جو دائرو privateيا ته آهي package private.
  4. اهو ضروري آهي ته هڪ متغير جي وضاحت ڪرڻ لاء - هڪ طبقاتي فيلڊ جيڪو اسان جي وضاحت ڪيل اسٽرنگ مستقل کي محفوظ ڪندو. توهان کي هن فيلڊ لاءِ حاصل ڪرڻ وارو طريقو ٺاهڻ گهرجي انهي لاءِ ته جيئن string constants جي قدرن کي ٻاهران استعمال ڪيو وڃي.

اسٽرنگ انگن اکرن تي ٻيهر ڪرڻ

هن اسٽيج تي، اسان اڳ ۾ ئي سڀني موجود 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.

String کي Enum ۾ تبديل ڪرڻ

ڪڏهن ڪڏهن متضاد ضرورت پيدا ٿئي ٿي. قدر ڄاڻڻ enum، enumپاڻ کي مسلسل حاصل ڪريو. اهي. اسان جي مثال ۾، هڪ خاص پتو ڄاڻڻ، توهان کي لاڳاپيل Environmentمسلسل حاصل ڪرڻ جي ضرورت آهي. هن کي ڪرڻ لاء ڪيترائي اختيار آهن. ۽ انهن سڀني کي enumپنهنجي طبقي ۾ بهتري جي ضرورت آهي. آپشن 1. ڪلاس اندر ڳڻپ. enumتوھان کي ھڪڙو طريقو ٺاھڻ جي ضرورت آھي جيڪا ھڪڙي اسٽرنگ کي قبول ڪندي ۽ ان کي ڪلاس جي سڀني قدرن سان مقابلو ڪندي . جيڪڏهن هڪ ميچ آهي، طريقو گهربل انگن اکرن کي واپس ڏيندو. اسان جي مثال لاء، اسان کي Environmentڪلاس اندر هيٺ ڏنل طريقو ٺاهڻ جي ضرورت آهي:
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
اهو طريقو ان جي downsides آهي. هر دفعي، 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 ھن صورت ۾، اسان پنھنجي اينم جي اندر ھڪڙو نقشو ٺاھيو آھي ۽ ان کي ھڪڙي وقت ٺاھڻ جي وقت تي آباد ڪيو، ۽ پوء ان مان قدر وٺو:
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طبقن ۾ عام طور تي ڪيتريون ئي قيمتون ذخيرو نه هونديون آهن، نقصان تقريبا پوشيده هوندا. هتي هڪ احتياط آهي: جيڪڏهن اهڙي آپريشن (اسٽرنگ ويليو ذريعي جاوا اينم حاصل ڪرڻ) اڪثر ڪيو ويندو آهي، اهو بهتر آهي ته ٻيو اختيار استعمال ڪيو وڃي. توھان ھن موضوع بابت وڌيڪ سکو سگھو ٿا ۽ Enumعام طور تي جاوا رش ڪورس ۾ ڪلاسز. شاگرد JavaRush سکن ٿا اڳ ۾ ئي پنجين ليول جي پهرين ليڪچرEnum تي . Enum کي اسٽرنگ ۾ تبديل ڪرڻ - 2
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION