اڄ اسان ڪم ڪرڻ جي باري ۾ ڳالهائينداسين اسٽرنگ انگن اکرن سان، ۽ خاص طور تي، انهن
enum
طبقن سان جيڪي اسٽرنگ مستقل سان رابطي کي منظم ڪن ٿا.
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
- ڊولپمينٽ ۽ ڊيبگنگ لاءِ مقامي
- هر يو آر ايل اسان جي ڳڻپ ۾ هڪ اسٽرنگ مستقل آهي: اهي هر مستقل جي اڳيان قوس ۾ بيان ڪيا ويا آهن
enum
. - اتي ھڪڙو ٺاھيندڙ ھجڻ گھرجي جيڪو ھڪڙي قسم جو ھڪڙو دليل وٺندو آھي جيئن ھر
enum
مستقل. - تعمير ڪندڙ جو دائرو
private
يا ته آهيpackage private
. - اهو ضروري آهي ته هڪ متغير جي وضاحت ڪرڻ لاء - هڪ طبقاتي فيلڊ جيڪو اسان جي وضاحت ڪيل اسٽرنگ مستقل کي محفوظ ڪندو. توهان کي هن فيلڊ لاءِ حاصل ڪرڻ وارو طريقو ٺاهڻ گهرجي انهي لاءِ ته جيئن 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
تي .
GO TO FULL VERSION