java注解字段类型相同_《java基础学习之——重复注解》
在某些情況下,您要將相同的注釋應用于聲明或類型使用。從JavaSE 8版本開始,重復注釋使您能夠做到這一點。
例如,您正在編寫代碼以使用定時服務,使您能夠在給定時間或某個時間表運行方法,類似于UNIXcron服務。現(xiàn)在你想設置一個計時器來運行一個方法doPeriodicCleanup,在這個月的最后一天和每個星期五晚上11點。要設置運行定時器,創(chuàng)建一個@Schedule注解并將其應用于doPeriodicCleanup方法兩次。第一個用途指定一個月的最后一天,第二個用于指定星期五為11p.m.,如下面的代碼示例所示:
@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Fri", hour="23")
public void doPeriodicCleanup() { ... }
前面的示例將注解應用于方法。您可以在使用標準注解的任何地方重復注釋。例如,您有一個用于處理未經(jīng)授權的訪問異常的類。您可以使用一個@Alert注解為管理員manager注解該類,另一個用于管理員admin:
@Alert(role="Manager")
@Alert(role="Administrator")
public class UnauthorizedAccessException extends SecurityException { ... }
出于兼容性原因,重復注釋存儲在由Java編譯器自動生成的容器注解中。為了使編譯器執(zhí)行此操作,在你的代碼中兩個聲明必須要寫。
第一步:聲明一個可重復的注解類型
注:將相同的注解應用于聲明而不首先聲明它可重復,導致編譯時錯誤。
該注解類型必須被@Repeatable元注解所標記,以下例子定義了一個注解@Schedule為可重復注解類型:
importjava.lang.annotation.Repeatable;
@Repeatable(Schedules.class)
public @interface Schedule {
String dayOfMonth() default"first";
String dayOfWeek() default"Mon";
int hour() default 12;
}
@Repeatable元注釋括號中的的值是Java編譯器生成的用于存儲重復注釋的容器注解的類型。在此示例中,容器注解的類型為Schedules,因此重復注解@Schedule將存儲在@Schedules注解中。
第二步:聲明包含注解類型
容器注解類型必須具有數(shù)組類型的值元素。數(shù)組類型的組件類型必須是可重復的注釋類型。容器注解類型Schedules的聲明如下:
public@interface Schedules {
Schedule[] value();
}
檢索注解
Reflection API中有幾種可用于檢索注解的方法。返回單個注釋的方法(如AnnotatedElement.getAnnotationByType(Class))。如果存在所請求類型的一個注解,它們只返回單個注釋。如果存在多個請求類型的注解,您可以先獲取它們的容器注解來獲取它們。這樣,舊代碼繼續(xù)運行。在Java SE 8中引入了其他方法,它們通過容器注釋進行掃描,以一次返回多個注釋,如AnnotatedElement.getAnnotations(Class)。有關所有可用方法的信息,請參閱AnnotatedElement類規(guī)范。
設計注意事項
設計注解類型時,您必須考慮該類型注解的基數(shù)。現(xiàn)在可以使用注解零次,一次,或者如果注解的類型被標記為@Repeatable多次。也可以通過使用@Target元注解來限制可以使用注解類型的位置。例如,您可以創(chuàng)建只能在方法和字段上使用的可重復注解類型。重要的是仔細設計注解類型,以確保使用注解的程序員發(fā)現(xiàn)它盡可能靈活和強大。
總結
以上是生活随笔為你收集整理的java注解字段类型相同_《java基础学习之——重复注解》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java碰到边界变颜色_求教!!!小球撞
- 下一篇: java二叉树生成器_JAVA实现二叉树