JavaRush /جاوا بلاگ /Random-UR /Enum کو سٹرنگ میں تبدیل کرنا

Enum کو سٹرنگ میں تبدیل کرنا

گروپ میں شائع ہوا۔
آج ہم سٹرنگ کی گنتی کے ساتھ کام کرنے کے بارے میں بات کریں گے، اور خاص طور پر، ایسی enumکلاسوں کے ساتھ جو سٹرنگ کنسٹینٹس کے ساتھ تعامل کو منظم کرتی ہیں۔ Enum کو سٹرنگ میں تبدیل کرنا - 1

سٹرنگ شماریات کا استعمال

ایپلیکیشن ڈویلپمنٹ کے دوران، آپ کو وقتاً فوقتاً اسٹرنگ ویلیوز کے ایک مقررہ سیٹ پر کام کرنے کی ضرورت ہوتی ہے۔ یہ کچھ بھی ہو سکتا ہے۔ مثال کے طور پر، ایپلیکیشن کے ذریعے تعاون یافتہ رنگین کوڈز کی فہرست، یا ان آلات کی فہرست جن کے ساتھ ہماری ایپلیکیشن تعامل کر سکتی ہے، موسم وغیرہ۔ یہ سب ایک مشترکہ ڈھانچہ کے ساتھ سٹرنگ کنسٹینٹس کا پہلے سے طے شدہ سیٹ ہے، جس کے ساتھ جاوا کوڈ کی سطح پر پروگرام کا تعامل قائم کرنا ضروری ہے۔ جب آپ کو پہلے سے طے شدہ سٹرنگ (اور دیگر) مستقل سیٹ کے ساتھ تعامل کرنے کی ضرورت ہو تو، بہترین حل یہ ہے کہ آپ اپنی 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. متغیر کی وضاحت کرنا ضروری ہے - ایک کلاس فیلڈ جو اسٹرنگ کنسٹینٹس کو محفوظ کرے گا جو ہم نے بیان کیے ہیں۔ آپ کو اس فیلڈ کے لیے ایک گیٹر طریقہ بنانا چاہیے تاکہ سٹرنگ کنسٹینٹس کی قدروں کو بیرونی طور پر استعمال کیا جا سکے۔

سٹرنگ کی گنتی پر تکرار کرنا

اس مرحلے پر، ہم پہلے سے ہی تمام دستیاب 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، اور اس مستقل سے وابستہ یو آر ایل کو پرنٹ کرنے کے لیے، ہم نے جس گیٹر کی وضاحت کی ہے اسے استعمال کیا۔

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 حاصل کرنا

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مستقل حاصل کرنے کی ضرورت ہے۔ ایسا کرنے کے کئی اختیارات ہیں۔ اور ان سب کو 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
اس نقطہ نظر کے اپنے منفی پہلو ہیں۔ ہر بار، 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