- Published on
Enumerations، Autoboxing و Annotations در جاوا
- نویسندگان
- نام
- هومن امینی
- توییتر
- @HoomanAmini
جاوا از نسخه ۵ سه ویژگی قدرتمند و کلیدی را معرفی کرده است که برنامهنویسی را ساده و کارآمدتر میکنند: Enumerations، Autoboxing و Unboxing، و Annotations. هر یک از این ویژگیها برای رفع نیازهای خاص طراحی شدهاند و در این مقاله به طور جامع به توضیح آنها پرداخته میشود.
۱. Enumerations
تعریف:
- Enumeration یا
enum
یک نوع داده خاص در جاوا است که به شما اجازه میدهد لیستی از مقادیر ثابت (مانند روزهای هفته، ماههای سال یا وضعیتها) را تعریف کنید. enum
نوع دادهای تعریف میکند که فقط مقادیر مشخصشده را قبول میکند و از خطاهای ناشی از ورود دادههای نامعتبر جلوگیری میکند.
ایجاد یک Enumeration:
enum Apple {
Jonathan, GoldenDel, RedDel, Winesap, Cortland;
}
استفاده از Enumeration:
public class Main {
public static void main(String[] args) {
Apple ap = Apple.RedDel;
switch (ap) {
case Jonathan:
System.out.println("Jonathan انتخاب شد.");
break;
case RedDel:
System.out.println("Red Delicious انتخاب شد.");
break;
default:
System.out.println("نوع دیگری انتخاب شد.");
}
}
}
ویژگیهای Enumeration:
استفاده در دستور
switch
: مقادیرenum
بهطور مستقیم در دستورswitch
پشتیبانی میشوند.متدهای از پیش تعریفشده:
name()
: نام مقدارenum
را به صورت رشته برمیگرداند.ordinal()
: موقعیت مقدار در لیستenum
(از صفر شروع میشود) را بازمیگرداند.
مثال:
Apple ap = Apple.Winesap;
System.out.println("نام: " + ap.name());
System.out.println("اندیس: " + ap.ordinal());
- امکان اضافه کردن متد و سازنده:
- هر
enum
میتواند شامل متدها و سازندهها باشد.
- هر
۲. Autoboxing و Unboxing
تعریف:
- Autoboxing فرآیندی است که در آن جاوا بهطور خودکار یک نوع داده اولیه (مانند
int
) را به نوع wrapper مربوطه (مانندInteger
) تبدیل میکند. - Unboxing فرآیند معکوس است که در آن جاوا نوع wrapper را به نوع داده اولیه تبدیل میکند.
مثال Autoboxing:
Integer i = 10; // Autoboxing از int به Integer
مثال Unboxing:
Integer i = 10;
int j = i; // Unboxing از Integer به int
مزایا:
- کاهش پیچیدگی کدنویسی.
- بهبود خوانایی و سادهتر شدن کد.
احتیاطها:
- استفاده بیشازحد از wrapper types به جای primitive types میتواند منجر به کاهش کارایی شود.
- ممکن است باعث ایجاد خطاهای زمان اجرا شود اگر مقدار null در یک عملیات Unboxing استفاده شود.
مثال با جمع دو عدد:
Integer a = 5, b = 10;
int sum = a + b; // Autoboxing و Unboxing
System.out.println("مجموع: " + sum);
۳. Annotations
تعریف:
- Annotations ابزاری برای افزودن متاداده به کد منبع است.
- این متادادهها میتوانند توسط ابزارهای توسعه، کامپایلر، و یا در زمان اجرا مورد استفاده قرار گیرند.
کاربردهای Annotations:
- پیکربندی و مستندسازی:
- مانند
@Override
برای اطمینان از بازنویسی صحیح متدها.
- مانند
- کنترل رفتار در زمان اجرا:
- مانند
@SuppressWarnings
برای خاموش کردن هشدارها.
- مانند
- تزریق وابستگی:
- در فریمورکهایی مانند Spring و Hibernate.
ایجاد یک Annotation سفارشی:
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotation {
String value();
}
استفاده از Annotation سفارشی:
public class Main {
@MyAnnotation(value = "مثال")
public void myMethod() {
System.out.println("این یک متد Annotated است.");
}
}
ویژگیهای Annotation:
Retention Policy:
- تعیین میکند Annotation تا چه مرحلهای حفظ شود.
- SOURCE: فقط در کد منبع نگهداری میشود.
- CLASS: در فایل بایتکد نگهداری میشود اما در زمان اجرا در دسترس نیست.
- RUNTIME: در زمان اجرا نیز در دسترس است.
Target:
- مشخص میکند Annotation روی چه بخشی از کد (کلاس، متد، متغیر) اعمال شود.
Annotationهای رایج در جاوا:
@Override
:- برای اطمینان از بازنویسی صحیح یک متد استفاده میشود.
@Override
public String toString() {
return "مثال بازنویسی شده";
}
@Deprecated
:- نشان میدهد که یک متد یا کلاس دیگر نباید استفاده شود.
@Deprecated
public void oldMethod() {
System.out.println("این متد قدیمی است.");
}
@SuppressWarnings
:- برای خاموش کردن هشدارهای خاص استفاده میشود.
@SuppressWarnings("unchecked")
public void myMethod() {
List list = new ArrayList();
}
خواندن Annotationها در زمان اجرا:
import java.lang.reflect.*;
public class Main {
public static void main(String[] args) throws Exception {
Method m = Main.class.getMethod("myMethod");
MyAnnotation annotation = m.getAnnotation(MyAnnotation.class);
System.out.println("مقدار Annotation: " + annotation.value());
}
@MyAnnotation(value = "مثال")
public void myMethod() {
System.out.println("متد Annotated");
}
}
جمعبندی
- Enumerations ابزاری قدرتمند برای تعریف مقادیر ثابت و محدود در کد هستند.
- Autoboxing و Unboxing کدنویسی را سادهتر کرده و تبدیل بین دادههای اولیه و Wrapperها را خودکار کرده است.
- Annotations امکان افزودن متاداده به کد را فراهم کرده و نقش مهمی در توسعه فریمورکها و ابزارهای جاوا دارد.
با استفاده از این ویژگیها، کدنویسی در جاوا سادهتر، قابل مدیریتتر و کارآمدتر شده است.