Java注解解析(二)

上一篇博客介绍到注解的分类以及每一种注解的特点。这次来说说自定义注解。


在说注解之前先说说元注解。

元注解


元注解简单来说就是注解的注解。
在上一篇博客说到注解根据运行机制可以分为三种。那么我们自定义的注解是属于哪一种呢?其实可以属于任何一种。因为我们可以用元注解给我们自定义的注解标记到底是编译时注解还是运行时注解。
元注解主要有以下几种:
@Target  
用来标注注解的作用域 ,用法: @Target({ElementType.METHOD,ElementType.TYPE})    这个注解的作用是,被这个注解说标注的注解的作用域是类。接口或者方法。  @Target 的值可以传入一个或多个:@Target({ElementType.METHOD})和@Target({ElementType.METHOD,ElementType.TYPE}) 都是可以的,具体使用还看具体情况。@Target  的值可以取得值:
ElementType.METHOD  作用于方法声明
ElementType.TYPE   作用于类或方法声明
ElementType.CONSTRUCTOR  作用于构造方法声明
ElementType.FIELD  作用于字段声明
ElementType.PACKAGE  作用于包声明
ElementType.LOCAL_VARIABLE  作用于局部变量声明
ElementType.PARAMETER   作用于参数声明

@ Retention 
用来标注注解的作用时机
用法: @ Retention (RetentionPolicy.RUNTIME
RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略
RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用


@Inherited  标示性注解运行子类继承  标记了此注解的注解只在被标记的子类有效。可能这句话比较难懂,假如有一个A自定义注解,A注解在定义的时候被标上了 @Inherited。而A注解又标注了B类,C类继承了B类。此时注解A的作用只作用于C类。
@Documented 在生成Javadoc时会包含注解

介绍了一些元注解。那么接下来我们来看自定义注解到底是怎样自定义的

自定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface MyAnnotaion {
int age() default 20;
String name();
}
可以看到上面的自定义注解,是一个作用于方法声明的运行时注解
定义注解的格式就是
public @interface 注解名称{

}
然后再自定义的注解里面可以有注解成员。
注解成员的定义格式:String XXX();在定义注解成员的时候可以给注解成员一个默认值:int age() default 20。
要注意的是注解成员的类型只能是基本数据类型以及相应的数组,封装类, String、Class、enums、注解类型。类似于List,Map是非法的。
而且定义的时候必须无参无异常。


下一篇博客将会说到如何解析自定义注解


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值