انوتیشن ها (Annotations)
«انوتیشن ها در جاوا» یادداشت های ویژه روی کد هستند. آن ها با @ شروع می شوند. آن ها رفتار برنامه را عوض نمی کنند. اما به کامپایلر و ابزارها اطلاعات اضافه می دهند.
انوتیشن های پرکاربرد
سه مورد مهم داریم: @Override، @Deprecated و @SuppressWarnings. هر کدام هدفی روشن دارند و خطاها را زودتر نشان می دهند.
@Override: اطمینان از بازنویسی درست
«بازنویسی (Override)» یعنی متد فرزند، متد هم نامِ پدر را جایگزین کند. با @Override، کامپایلر اشتباه تایپی را سریع می فهمد.
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof!");
}
}
خطای رایج با تایپ اشتباه
اگر نام متد را اشتباه بنویسی، @Override خطا می دهد. این عالی است؛ چون مشکل پنهان نمی ماند.
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void makesound() {
System.out.println("Woof!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound();
}
}
گام های تمرینی
- یک کلاس Parent بساز و متد greet اضافه کن.
- کلاس Child بساز و greet را با @Override بازنویسی کن.
- نام متد را عمداً اشتباه بنویس و خطا را ببین.
@Deprecated: هشدار برای کد قدیمی
«منسوخ (Deprecated)» یعنی بهتر است دیگر از آن استفاده نکنی. شاید بعداً حذف شود.
public class Main {
@Deprecated
static void oldMethod() {
System.out.println("This method is outdated.");
}
public static void main(String[] args) {
oldMethod();
}
}
@SuppressWarnings: پنهان کردن هشدار هدفمند
این انوتیشن به کامپایلر می گوید بعضی هشدارها را نادیده بگیرد. مثلاً «unchecked» هنگام استفاده از نوع خام.
import java.util.ArrayList;
public class Main {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
ArrayList cars = new ArrayList();
cars.add("Volvo");
System.out.println(cars);
}
}
بهتر از پنهان کردن هشدار
به جای خام نوشتن ArrayList، از جنریک استفاده کن. این امن تر است.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> cars = new ArrayList<>();
cars.add("Volvo");
System.out.println(cars);
}
}
نکته: برای ادامه مسیر، صفحه جنریک ها در جاوا را هم ببین. سپس به عبارات باقاعده سر بزن.
جمع بندی سریع
- @Override خطای بازنویسی را زودتر آشکار می کند.
- @Deprecated درباره کد قدیمی هشدار می دهد.
- @SuppressWarnings هشدارهای خاص را موقتاً می پوشاند.
- بهتر است هشدار را ریشه ای برطرف کنی.
- انوتیشن ها کد را خواناتر و امن تر می کنند.