توضیحات
از کلاس های enum برای نگهداری تعداد متناهی از آبجکت های ثابت استفاده می کنیم.
معمولا enum رو زمانی تعریف میکنیم که تو برنامه چندتا وضعیت مشخص داریم.
هرکدوم از آبجکت هایی که داخل این کلاس ها ایجاد می کنیم گویای وضعیت بخصوصی در برنامه یا قسمتی از برنامه هستند و تمام وضعیت های موجود مورد نظر رو داخل کلاس enum به صورت آبجکت های ثابت بیان می کنیم.
فرم کلی این کلاس ها به صورت زیر است
در بالا Object0 تا ObjectN داخل Status نمونه ای از کلاس Status هستند.
بررسی و ویژگی کلاس های enum
همینطور که گفتیم بعد از تعریف کلاس enum میتونیم یک یا چند آبجکت ثابت داخلش تعریف کنیم و هرکدوم گویای وضعیت خاصی از برنامه میتونن باشن.
مقادیر آبجکت ها ثابت و غیرقابل تغییر هستند برای همین بهشون آبجکت های ثابت کلاس enum میگیم.
در زیر یک کلاس enum ایجاد کردیم و سه آبجکت داخلش تعریف کردیم برای داشتن سه وضعیت خاموش، روشن و استندبای
کلاس enum به طور پیشفرض دارای پراپرتی entries است این پراپرتی از نوع EnumEntries است و مانند آرایه یا لیست تمام آبجکت های تعریف شده برای enum رو نگهداری میکنه:
توجه
در کلاس های enum یک تابع پیشفرض نیز وجود داره به اسم values، این تابع کاربرد مشابه پراپرتی entries داره اما استفاده ازش توصیه نمیشه چون با هر بار صدا زدن تابع یک نمونه ی جدید از کلاس arrays ایجاد میشه و این کار کیفیت برنامه رو پایین میاره.
با تابع valueOf(String) کلاس enum میتونیم آبجکت مورد نظر رو بر اساس اسمش پیدا کنیم:
توجه
در صورت نبود آبجکت هم نام با استرینگ تابع valueOf برنامه دچار illegalArgumentException میشه.
آبجکت های enum به طور پیشفرض دارای دو پراپرتی name و ordinary هستند
پراپرتی name اسم آبجکت رو به صورت String بر میگردونه و پراپرتی ordinary شماره جایگاه آبجکت در کلاس رو به صورت integer
در کانستراکتور کلاس های enum میتونیم مثل بقیه ی کلاس ها پراپرتی تعریف کنیم، این پراپرتی ها باید هنگام تعریف آبجکت های ثابت مقداردهی بشن
داخل کلاس های enum میتونیم تابع و پراپرتی های ابسترکت نیز تعریف کنیم:
میتونیم اینترفیس ها رو داخل کلاس enum پیادهسازی کنیم و کلاس های enum به طور پیشفرض اینترفیس Comparable<T> رو پیادهسازی کردن.
نکته
نمیتونیم از کلاس های دیگه توسط کلاس enum ارث ببریم.
خلاصه
- کلاس های enum مجموعه ی متناهی از آبجکت های ثابت هستند.
از این کلاس ها برای تعیین کردن وضعیت به خصوصی در برنامه استفاده میکنیم.
برای هر وضعیت یک آبجکت تعریف میکنیم.
میتونیم اینترفیس ها رو در کلاس enum پیادهسازی کنیم
نمیتونیم از کلاس های دیگه توسط کلاس enum ارث ببریم.