一 @Target注解
1 点睛
@Target注解:如果没有指定使用的位置,则可以在任意位置使用,@Target用于指定在什么位置使用注解。一共有10个取值:
public enum ElementType {
//只能用在类、接口、枚举类型上。
TYPE,
//字段声明和枚举常量
FIELD,
//只能用在方法声明上
METHOD,
//只能用在参数的声明上
PARAMETER,
//只能用在构造方法的声明上
CONSTRUCTOR,
//只能用在局部变量声明上
LOCAL_VARIABLE,
//只能用在注解上
ANNOTATION_TYPE,
//只能用在包上
PACKAGE,
TYPE_PARAMETER,
TYPE_USE
}
2 限制自定义Annotation的使用范围
//定义该自定义注解的保存范围是RUNTIME
@Retention(value = RetentionPolicy.RUNTIME)
//当value的值只有一个时可以省略花括号,该注解只能声明在方法上,用在其他地方都会产生编译错误
@Target(value = {ElementType.METHOD})
@interface MyAnnotation
{
public String key();
public String value();
}
3 说明
如果value要设置多个值,可以使用下面方法,放在大括号中。
@Target(value = {ElementType.METHOD,ElementType.TYPE})
二 @Documented注解
使用了该注解后,将自定义注解设置为文档说明内容,在生成javadoc时会将该注解加入到文档中。
参考:https://blog.csdn.net/evilcry2012/article/details/77943212
三 @Inherited注解
1 介绍
@Inherited注解用于标注一个父类的注解是否可以被子类继承,如果一个注解需要被其子类所继承,则在声明时直接使用@Inherited注解即可。如果没有写此注解,则无法被子类继承。
2 示例
//自定义一个注解
@interface AnnoationDefault
{
public String key() default "var1";
public String value() default "value1";
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited //如果父类使用了HeritedApplication注解,则子类应该继承
@AnnoationDefault
@interface HeritedApplication {
}
//父类使用了@HeritedApplication注解
@HeritedApplication
class Person {
}
//Employee子类应该继承@HeritedApplication注解
class Employee extends Person{
}
class AnnotationInherited{
public static void main(String[] args) throws Exception
{
Class clazz = Employee.class ;
//Employee类是否有@HeritedApplication
if(clazz.isAnnotationPresent(HeritedApplication.class)){
System.out.println("true");
}
}
}
3 运行结果——结果说明子类继承了@HeritedApplication注解
true
四 参考