انوتیشن ها (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 هشدارهای خاص را موقتاً می پوشاند.
- بهتر است هشدار را ریشه ای برطرف کنی.
- انوتیشن ها کد را خواناتر و امن تر می کنند.
