تعد Java enum أنواع بيانات قوية تمثل مجموعة ثابتة من الثوابت. يتم استخدامها بشكل شائع لتحديد مجموعة محددة من القيم التي يمكن أن يأخذها الكائن. في بعض الأحيان، قد ترغب في تحويل رسم توضيحي لسلسلة إلى قيمة تعداد. في هذا السياق، سوف نستكشف استراتيجيات متنوعة لتحويل سلسلة إلى تعداد في Java، ونقدم لك برنامجًا كاملاً لفهم أفضل.
فهم التعداد في جافا:
قبل الغوص في عملية التحويل، دعونا نلخص بإيجاز Java enum. تم تقديم التعدادات، أو التعداد باختصار، في Java 5 لتوفير طريقة أكثر تنظيمًا لتمثيل القيم الثابتة. يحدد إعلان التعداد مجموعة ثابتة من القيم التي يمكن أن يأخذها متغير من نوع التعداد هذا. تسمى كل قيمة في التعداد بثابت التعداد.
فيما يلي مثال لإعلان التعداد:
public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
في هذه الحالة، Day هو اسم التعداد، وله سبعة ثوابت تمثل أيام الأسبوع. يمكن أن يحتوي Enum أيضًا على حقول وطرق إضافية، مما يجعلها أكثر مرونة وقوة من القيم الثابتة البسيطة.
تحويل سلسلة إلى التعداد:
عندما يكون لديك تمثيل سلسلة وتريد أيضًا تحويله إلى تعداد، يمكنك اتباع أساليب مختلفة بناءً على متطلباتك. سنتحدث هنا عن ثلاث طرق شائعة لإجراء هذا التحويل: استخدام طريقة valueOf()، واستخدام التعيين المخصص، واستخدام طريقة Enum.ValueOf().
الطريقة الأولى: استخدام طريقة valueOf()
الطريقة المباشرة القصوى لتحويل سلسلة إلى تعداد هي بمساعدة استخدام تقنية valueOf() المقدمة عن طريق التعداد نفسه. يأخذ هذا الأسلوب اسم التعداد المتسق كسلسلة ويعيد التعداد المقابل بشكل منتظم إذا تم اكتشافه. هنا مثال:
StringToEnumExample.java
public class StringToEnumExample { public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { String dayString = 'FRIDAY'; Day day = Day.valueOf(dayString); System.out.println(day); // Output: FRIDAY } }
انتاج:
FRIDAY
في هذا المثال، نقوم بتحويل السلسلة 'FRIDAY' إلى تعداد اليوم عن طريق استدعاء الأسلوب valueOf() . وتكون النتيجة ثابت التعداد Day.FRIDAY، والذي تتم طباعته بعد ذلك على وحدة التحكم.
من المهم ملاحظة أن التابع valueOf() حساس لحالة الأحرف، وإذا كانت السلسلة لا تتطابق مع أي ثابت تعداد، فسيتم طرح java.lang.IllegalArgumentException. للتعامل مع هذا الأمر، يمكنك تغليف التحويل في كتلة محاولة الالتقاط للتعامل مع الاستثناء بأمان.
الطريقة الثانية: استخدام التعيين المخصص
في بعض الحالات، قد تحتاج إلى إجراء تعيين مخصص بين تمثيل السلسلة وثابت التعداد. يكون هذا الأسلوب مفيدًا عندما لا تتطابق قيم السلسلة مع أسماء ثوابت التعداد تمامًا. هنا مثال:
StringToEnumExample.java
public class StringToEnumExample { // Define the Day enum with associated abbreviations public enum Day { MONDAY('Mon'), TUESDAY('Tue'), WEDNESDAY('Wed'), THURSDAY('Thu'), FRIDAY('Fri'), SATURDAY('Sat'), SUNDAY('Sun'); // Private field to store the abbreviation for each day private final String abbreviation; // Constructor to initialize the abbreviation for each enum constant Day(String abbreviation) { this.abbreviation = abbreviation; } // Getter method to retrieve the abbreviation for a specific day public String getAbbreviation() { return abbreviation; } // Custom method to convert an abbreviation string to the corresponding enum constant public static Day fromAbbreviation(String abbreviation) { for (Day day : Day.values()) { if (day.getAbbreviation().equalsIgnoreCase(abbreviation)) { return day; } } // If no match is found, throw an IllegalArgumentException throw new IllegalArgumentException('Invalid abbreviation: ' + abbreviation); } } public static void main(String[] args) { String dayString = 'Fri'; // Convert the abbreviation string to the corresponding Day enum constant Day day = Day.fromAbbreviation(dayString); System.out.println(day); // Output: FRIDAY } }
انتاج:
FRIDAY
في هذا المثال، يحتوي تعداد اليوم على حقل إضافي يسمى الاختصار، والذي يمثل تمثيل سلسلة أقصر لليوم. نحدد طريقة مخصصة fromAbbreviation() تقوم بإجراء التحويل بناءً على الاختصار. إذا كان الاختصار يطابق أي ثابت التعداد، فسيتم إرجاع ثابت التعداد المقابل؛ وإلا فسيتم طرح استثناء.
الطريقة الثالثة: استخدام طريقة Enum.valueOf()
تتضمن الطريقة الثالثة استخدام الأسلوب Enum.valueOf()، وهو أسلوب للأغراض العامة لتحويل السلاسل إلى ثوابت التعداد. هنا مثال:
StringToEnumExample.java
public class StringToEnumExample { // Define the Day enum with seven constants representing the days of the week public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { // Define the string representation of the day String dayString = 'SUNDAY'; // Convert the string to the corresponding Day enum constant using Enum.valueOf() Day day = Enum.valueOf(Day.class, dayString); // Print the value of the day System.out.println(day); // Output: SUNDAY } }
انتاج:
SUNDAY
في هذا المثال، نقوم بتمرير فئة التعداد (Day.class) وتمثيل السلسلة (dayString) إلى الأسلوب Enum.valueOf(). تقوم بإرجاع ثابت التعداد المقابل إذا تم العثور عليه، أو تطرح IllegalArgumentException إذا لم يتم العثور على تطابق.
في هذه المقالة، اكتشفنا طرقًا مختلفة لتحويل سلسلة إلى تعداد في Java. لقد ناقشنا استخدام طريقة valueOf()، وإنشاء تعيين مخصص، واستخدام طريقة Enum.valueOf(). اعتمادا على متطلباتك، يمكنك اختيار النهج الأنسب. تذكر أن تتعامل مع الاستثناءات عند استخدام طريقة valueOf()، وفكر في تعيين مخصص عندما لا تتطابق قيم السلسلة مع أسماء ثوابت التعداد مباشرةً.