1、java SE5内置了三种内建注解
@Override,表示当前的方法定义将覆盖超类中的方法。@DePRecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。@SuppressWarnings,关闭不当编译器警告信息。2、Java还提供了4种元注解
元注解 | 解释 |
---|---|
@Target | 表示该注解可以用于什么地方,可能的ElementType参数有:CONSTRUCTOR:构造器的声明FIELD:域声明(包括enum实例)LOCAL_VARIABLE:局部变量声明METHOD:方法声明PACKAGE:包声明PARAMETER:参数声明TYPE:类、接口(包括注解类型)或enum声明 |
@Retention | 表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:SOURCE:注解将被编译器丢弃CLASS:注解在class文件中可用,但会被VM丢弃RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。 |
@Document | 将注解包含在Javadoc中 |
@Inherited | 允许子类继承父类中的注解 |
注解分为两类,一类是元注解,另外一类是普通注解。 所谓元注解就是修饰注解的注解。 拿到一个注解,如何知道它是否是元注解呢?需要看它的元注解(无论是元注解还是普通注解都是有元注解的),如果看到这样的元注解:@Target(ElementType.ANNOTATION_TYPE),那么此时这个注解一定是元注解。
(1)以@interface关键字定义 (2)注解包含成员,成员以无参数的方法的形式被声明。其方法名和返回值定义了该成员的名字和类型。 (3)成员赋值是通过@Annotation(name=value)的形式。 (4)注解需要标明注解的生命周期,注解的修饰目标等信息,这些信息是通过元注解实现。
例如:
@Retention(value = RetentionPolicy.RUNTIME)@Target(value = { ElementType.ANNOTATION_TYPE } )public @interface Target{ ElementType[] value();}源码分析如下: 第一:元注解@Retention,成员value的值为RetentionPolicy.RUNTIME。 第二:元注解@Target,成员value是个数组,用{}形式赋值,值为ElementType.ANNOTATION_TYPE 第三:成员名称为value,类型为ElementType[] 另外,需要注意一下,如果成员名称是value,在赋值过程中可以简写。如果成员类型为数组,但是只赋值一个元素,则也可以简写。如上面的简写形式为: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE)
新闻热点
疑难解答