转载

Java Annotation

https://blog.csdn.net/briblue/article/details/73824058

Annotation就是给代码打的标签,

元Annotation,定义Annotation本身的一些属性,常用的以下几种,

Retention注解

Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:

1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略

2.RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略

3.RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.

Documented 注解

Documented 注解表明这个注解应该被 javadoc工具记录.

Target注解

@Target说明了Annotation所修饰的对象范围:

1.CONSTRUCTOR:用于描述构造器

2.FIELD:用于描述域

3.LOCAL_VARIABLE:用于描述局部变量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包

6.PARAMETER:用于描述参数

7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

为什么要有注解?

注解是介于代码和注释之间的存在,

用于将代码中的对象,进行分类或标识,这样在编译或运行时,可以做对不同的分类做不同的处理

如何使用?

注解通过 @interface 关键字进行定义

public @ interface TestAnnotation { }

注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface TestAnnotation {

public int id() default -1;

public String msg() default "Hi";

}

使用的时候,

@TestAnnotation (id = 3 ,msg = "hello annotation" ) public class Test { }

或者,用默认值

@TestAnnotation ( ) public class Test { }

如果是runtime的Annotation,

可以在代码里面这样获取,

boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);

if ( hasAnnotation ) {

TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);

System.out.println("id:"+testAnnotation.id());

System.out.println("msg:"+testAnnotation.msg());

原文  http://www.cnblogs.com/fxjwind/p/11726236.html
正文到此结束
Loading...