您的位置:首页 > 编程语言 > Java开发

@深入注解,在Java中设计和使用自己的注解

2012-02-05 15:16 288 查看
我们用过 JDK给我们提供的 @Override @Deprecated @SuppressWarning 注解 ,这些注解是JDK给我们提供的 ,我们只是在用别人写好的东西 ,那么我们是否可以自己写注解呢?当然是可以的 。

我们写的注解包括三个环节

1、 注解的声明 ,也就是注解类的定义 形式如下 @interface 来进行注解的声明

package me.test;

import java.lang.annotation.* ;//导入注解包中所有注解

@Retention(RetentionPolicy.RUNTIME) //解释如下

@Target(ElementType.TYPE)//解释如下

public @interface MyAnnotation

{

}

@Retention(RetentionPolicy.RUNTIME)

指定了注解保留的周期 注解的生命周期有是三个 RetentionPolicy 枚举的三个值代表了三个声明周期 默认是CLASS



枚举常量摘要
CLASS


编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
RUNTIME


编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE


编译器要丢弃的注释。
@Target(ElementType.TYPE)

这个标识注解应该标在那里 ElementType的几个枚举值就代表了 注解应该写在的位置



CONSTRUCTOR


构造方法声明
FIELD


字段声明(包括枚举常量)
LOCAL_VARIABLE


局部变量声明
METHOD


方法声明
PACKAGE


包声明
PARAMETER


参数声明
TYPE


类、接口(包括注释类型)或枚举声明
2、 使用了注解的类 或者方法

@MyAnnotation

class A

{

}

3、 利用反射来操作注解 详细见代码

Class类有一个 方法




<A extends 
Annotation> 

A
   
getAnnotation(Class<A> annotationClass)
这个方法接受一个注解的字节码参数 ,然后返回这个类所标识的注解对象 ,因为我们标识了一个注解就相当于产生了一个注解对象 。



boolean
isAnnotationPresent(Class<? extends

Annotation> annotationClass)
这个方法判断一个类是否被注解所标识

下面是代码示例

MyAnnotationTest.java中

package me.test;

import java.lang.annotation.Annotation;

@MyAnnotation

public class MyAnnotationTest

{

public static void main(String []args)

{

if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))

{

MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;

System.out.println(an.toString());

}

}

}

MyAnnotation.java中

package me.test;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

public @interface MyAnnotation

{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: