از Annotation ها برای lable گذاری روی عناصر استفاده میشود و بعدا توسط Reflection میتوان بصورت Dynamic مقادیر یا instance هایی را ایجاد کرد
با Retention مشخص میکنیم که Annotation تا چه زمانی زنده بماند
با Target مشخص میکنیم که این Annotation قرار است روی چه المانی استفاده شود
محدودیت های Annotation :
هیچ یک از آنها نمیتوانند از دیگری ارث بری کنند
تمامی متد هایش بدون آرگومان ورودی باید باشند
متد ها نمیتوانند از throws استفاده کنند
annotation ها نمیتوانند Generic type داشته باشند
حتما باید یکی از مقادیر enum , primitive types , Class , String , Annotaion و یا آرایه از اینها را برگردانند
برای تعریف یک Annotation :
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AnnotName {
String attr1();
}