涉及到java開發時的一些註解(元註解)
在學習一些作者原創作品時,見到一些平時開發時用到不多的一些註解,爲了方便自己以後參考,在此留一些記錄
java元註解
@Retention
英譯中:保留
用途:保留位置
@Retention(RetentionPolicy.SOURCE)
僅存在與源碼中,在編譯成class字節碼文件後就不展示
@Retention(RetentionPolicy.CLASS)
默認的保留策略,註解會在class文件中存在,但運行時無法獲得
@Retention(RetentionPolicy.RUNTIME)
註解會在class文件中存在,並且運行時可以通過反射獲取到
@Target
英譯中:目標
用途:作用目標
@Target(ElementType.TYPE)
接口、類、枚舉、註解
@Target(ElementType.FIELD)
字段、枚舉的常量
@Target(ElementType.METHOD)
方法
@Target (ElementType.PARAMETER)
方法參數
@Target (ElementType.CONSTRUCTOR)
構造函數
@Target (ElementType.LOCAL_VARIABLE)
局部變量
@Target (ElementType.ANNOTATION_TYPE)
註解
@Target (ElementType.PACKAGE)
包
@Document
用途:說明該註解將被包含在javadoc中
@Inherited
用途:說明子類可以繼承父類中的該註解
實例
1.創建註解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestAnnotationI {
public String testGetStr();
int value();
}
2.調用註解
public class TakedClassImpl implements TakedClass{
private static final int ARG_1 = 10;
@Override
@TestAnnotationI(testGetStr = "1", value = ARG_1)
public String test1(String arg) {
System.out.println("start -------------");
return "1";
}
}
3.反射獲取註解,打印註解的參數值
public static String testAnnotation(String arg1){
Class ipt=TakedClassImpl.class;
Method[] mts=ipt.getMethods();
for(Method mt:mts){
TestAnnotationI ad=mt.getAnnotation(TestAnnotationI.class);//如果方法上 沒有該註解 則返回null
int value=ad.value();
System.out.println("value:"+value);
}
return arg1;
}