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