آشنایی با مدل Enum در جاوا
Enum یک نوع دادهای است که با استفاده از آن میتوانیم مقدار یک متغیر را بر اساس مقادیر ثابت, تعیین کنیم. در این مقاله قصد داریم تا با این نوع دادهای آشنا شویم.
حتما برای شما هم پیش آمده است که بخواهید یک متغیر را با مقادیر مشخصی مقدار دهی کنید. برای مثال متغیر جنسیت, تنها دو مقدار مونث و مذکر را میتواند اختیار کند. اگر یک متغیر برای نوع تخفیف داشته باشید, تنها دو حالت نقدی و درصدی را به خود اختصاص میدهد. برای پیاده سازی این مدل دادهای, به این صورت عمل میکنیم:
public enum Gender { Female,Male }
و برای استفاده از آن نیز به این صورت عمل میکنیم:
Gender myGender = Gender.Male;
مدل Enum هم میتواند به صورت یک فایل مجزا و هم درون یک کلاس تعریف شود. برای استفاده از آن در کلاس مدل نیز میتوانیم به این صورت عمل کنیم:
public class User { private String name; private Gender gender; }
بنابراین هرگاه که لازم است تا مقادیر مشخص و ثابتی را به متغیر ها اختصاص دهیم, از Enum استفاده میکنیم.
میتوانیم مقادیر مشخصی را برای Enum ها قرار دهیم. فرض کنید که میخواهیم یک متغیر از این نوع را در پایگاه داده ذخیره کنیم و یا در خروجی چاپ کنیم. در حالتی که ما تعریف کردهایم, مقدار متغیر بر اساس مقدار پیش فرض تعیین میگردد:
public static void main(String[] args) { Gender gender = Gender.Male; System.out.println(gender); // Output : Male }
حال اگر بخواهیم مقداری که متغیر برمیگرداند را تغییر دهیم, باید ساختار آن را تغییر دهیم:
public enum Gender { Male("آقا"),Female("خانم"); Gender(String label) { this.label = label; } private String label; @Override public String toString() { return label; } }
در کد بالا, یک مقدار مشخص را برای هر یک از مقادیر ثابت مشخص کردهایم. این مقادیر با استفاده از Constructor برای آنها قرار داده میشوند. وقتی میخواهیم یک کلاس را در خروجی چاپ کنیم, متد toString به صورت پیش فرض چاپ میشود. در کد بالا این متد را Override کردهایم و مقداری که برمیگرداند را برابر با مقدار تعیین شده قرار میدهیم. اکنون خروجی به این صورت است:
public static void main(String[] args) { Gender gender = Gender.Male; System.out.println(gender); // Output : آقا }
این روش در مواقعی که پایگاه داده ما از مدل Enum پشتیبانی نمیکند بسیار پرکاربرد است. برای مثال وقتی از Realm در اندروید استفاده میکنیم, مدل Enum در آن قابل استفاده نیست. به همین منظور برای استفاده از Enum بهتر است مقداری آن را در پایگاه داده نگهداری کنیم. در چنین مواردی استفاده از روش فوق بسیار کارآمد تر است.
برای مقایسه و بررسی مقدار Enum نیز میتوانیم مانند مقایسه اعداد در جاوا عمل کنیم:
public static void main(String[] args) { if (getGender()==Gender.Male) { System.out.println("Mr."); } else { System.out.println("Miss."); } } public static Gender getGender() { return Gender.Female; }
اکنون فرض کنید میخواهیم اطلاعات یکسری از دفاتر را نگهداری کنیم, که تنها در شهر های خاصی شعبه دارند. برای پیاده سازی چنین ساختاری میتوانیم از مدل Enum برای شهر ها استفاده کنیم:
public enum City { Babol(123.123,321.321), Tehran(456.456,654.654), Tabriz(789.789,987.987), Esfahan(198.198,891.891), Shiraz(765.765,567.567), Kerman(521.521,125.125), Bushehr(901.901, 109.109); City(double latitude, double longitude) { this.latitude = latitude; this.longitude = longitude; } private double latitude; private double longitude; public double getLatitude() { return latitude; } public double getLongitude() { return longitude; } @Override public String toString() { return super.toString() + " : Location [" + getLatitude() + "," + getLongitude() + "]"; } }
اکنون کلاس مدل را برای استفاده از آن تعریف میکنیم:
public class Seller { private String name; private String phone; private City city; }
و برای استفاده از آن چنین عمل میکنیم:
public static void main(String[] args) { Seller babolOffice=new Seller(); babolOffice.setCity(City.Babol); babolOffice.setName("Vhdrjb Office"); babolOffice.setPhone("+98 11 300000"); Seller tehranOffice=new Seller(); tehranOffice.setCity(City.Tehran); tehranOffice.setName("Main Office"); tehranOffice.setPhone("+98 21 8000000"); System.out.println(babolOffice.getCity()); /// Output : Babol : Location [123.123,321.321] System.out.println(tehranOffice.getCity()); /// Output : Tehran : Location [456.456,654.654] System.out.println(babolOffice.getCity().getLatitude()); /// Output : 123.123 System.out.println(tehranOffice.getCity().getLongitude()); /// Output : 654.654 }
همانطور که مشاهده میکنید, مدل ما ساختار بسیار منسجم تر و ساخت یافته تری به خود گرفته است.
در این مقاله سعی بر این شد تا مفهوم Enum و شیوه پیاده سازی آن را مورد بررسی قرار دهیم.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.