涉及到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;
}