Annotation入门了解-1

Annotation:

 

他是干嘛的?

他本身是一个接口类型,而大家所说的注解一般是这个接口的具体实现类。后文用"具体的注解"和"Annotation接口"来区分两者。

Annotation(后文称注解)作用于类,方法,变量,参数和包等代码。他可以在不改变源代码的基础上给所注解的代码加上一些类似"BUFF"的存在,让被注解的代码在编译阶段做出一些特别的事情

他是怎么组成的?

每一个具体的注解一般有以下3部分:

  • 接口--Annotation:所有注解的原始接口,有equals(),hashCode()、toString()、返回具体实现的子类类型的annotationType()方法。

  • 枚举类型--ElementType:用来规定注解用在什么地方,一个具体的注解可以允许作用于多个地方,比如说:

    • TYPE:限定这个具体的注解写到类、接口或枚举声明上方。

    • FIELD:字段声明上方。

    • METHOD:方法声明上方。

    • PARAMETER:参数声明之前方。

    • 等等

  • 枚举类型--RetentionPolicy:用来说明这个注解活到什么时候,一个具体的注解必须活到一个确切的时间(除了在源码阶段以外在哪些地方能看到),你比如说:

    • SOURCE(只保留在源码中)

    • CLASS(可以让这个注解存储于对应的.class文件里面,是默认值。)、

    • RUNTIME(在CLASS的基础上让他在JVM也可以读入,也就是在运行的时候也能看见,存储在JVM的)。


怎么定义一个具体的注解?

@Inherited
@Documented
@Target(ElementType.FIELD,ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Annotation_Test {
    
}

@interface是自定义注解所用到的一个注解。他的作用相当于Annotation_Test实现了Annotation接口。

这个注解类的上方也有注解,"难道注解还能给注解用?"不错,有些注解就是只能用来定义注解的。相当于在生活中给手机设置属性,这些属性项都有自己的默认值

@Targe用于标识这个具体注解的作用。括号内参数表明是说这个注解类可以作用在属性(或字段)和方法上,括号内可以填多个参数。

@Retention用于标识这个具体注解的策略,括号内参数只能填一个参数,表明他能活多久。

@Documented让这个注解类能够写入javadoc中。

@Inherited让这个具体的注解类具有继承性。

 

他有哪些具体代表?

  • @Overrider:限定重写父类方法,该注释只能用于方法。

  • @Deprecated:用于表示某个程序元素(类,方法等)已过时。让编译器对注解代码在被调用时标记不可用,具体表现为划一道横线。

  • @SuppressWarings:指示编译器忽略注解中声明的警告。让编译器不要理会某些代码的警告。

    上述三个注解是作用于代码上的,而以下是作用于注解的注解:

  • @Retention:标识这个注解怎么保存,是只在代码中,还是编入class文件,或者是在运行时可以通过反射访问。

  • Documented:标记这些注解是否包含在用户文档中。

  • Target:标记这个注解应该是哪种java成员。

  • Inherited:标记这个注解是继承于那个注解类(默认注解并没有继承于任何子类)

从Java7开始额外添加3个注解:

  • @SafeVarargs:忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。

  • FunctionalInterface:标识一个匿名函数或函数式接口。

  • Repeatable:标识某注解可以在同一个声明上使用多次。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值