Repeatable Annotationlar :
JDK 8 'in birlikte , bir annotation aynı eleman üzerinde tekrar edilebilir oldu.Buna repeating (tekrar eden) annotationlar (açıklamalar) denir.Bir annotationun tekrar edilebilir olabilmesi için , @Repeatable annotaionu ile açıklanmalıdır.@Repeatable annotationu java.lang.annotation packagenin içerisinde tanımlanmıştır.Onun value fieldi tekrar edilebilir annotation için container türünü belirtir.Value fieldi bir diziden oluşur. Repeated annotatinlarına erişebilmek için getAnnotation() gibi bir method kullanılır.Örneğe bakalım hemen :
import java.lang.annotation.*; import java.lang.reflect.Method; @Retention(RetentionPolicy.RUNTIME) @Repeatable(MyClass.class) @interface MyAnno{ String str(); } @Retention(RetentionPolicy.RUNTIME) @interface MyClass{ MyAnno[] value(); } public class MyFile{ @MyAnno(str = "Kerem") @MyAnno(str = "Java") public static void myMeth(){ try { Method method = MyFile.class.getMethod("myMeth"); MyClass myClass = method.getAnnotation(MyClass.class); System.out.println(myClass.value()[0].str()); System.out.println(myClass.value()[1].str()); } catch (NoSuchMethodException e) { e.printStackTrace(); } } public static void main(String[] args) { myMeth(); } }
Açıklandığı gibi , MyAnno'nun repeatable olabilmesi için , @Repeatable annotationu ile açıklanması,işaretlenmesi gereklidir , bu da onun container annotationu gösterir.Container(Kapsayıcı) annotationumuz (açıklayıcımız) burada MyClass'dır.
Çıktı:
Kerem
Java