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

黑马训练营--注解(二)

2013-10-26 10:18 513 查看
元注解有以下几种:

@Target 表示该注解用于什么地方。

@Retention表示要在什么级别保存该注解。

@Documented 将此注解包含在JavaDoc中。

@Inherited 允许子类继承父类中的注解。

Java中内置的注解@Override用于SOURCE级别,@SuppressWarnings用于SOURCE级别,@Deprecated用于RUNTIME级别。指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为
RetentionPolicy.CLASS。

编写注解类型

下面将用来读取PasswordUtils类,利用反射机制读取UseCase注解。

import java.lang.reflect.*;
import java.lang.annotation.*;
public class PasswordUtils{
 @UseCase(id=11,description="test1")
 public void test1(){}
 
 public void test2(){}
 
 //description的值用默认的值
 @UseCase(id=12)
 public void test3(){}
 
 @UseCase(id=13,description="private")
 private void test4(){};
 
 @UseCase(id=14,description="protected")
 protected void test5(){};
 
 @UseCase(id=14,description="default")
 void test6(){};
 
 public static void trackUseCases(Class<?> clazz){
  //利用反射返回对象的一个数组,这些对象反映此Class对象表示
  //的类或接口声明的所有方法,包括公共,保护,默认访问和私有方法,但不包括继承的方法。
   Method[] methods = clazz.getDeclaredMethods();
   for(Method m : methods){
    //如果指定类型的注释存在于此元素上,则返回 true,
    //否则返回 false。此方法主要是为了便于访问标记注释而设计的。
     if(m.isAnnotationPresent(UseCase.class)){
      UseCase uc = m.getAnnotation(UseCase.class);
     System.out.println("Method Name:" + m.getName() + " id:" + uc.id()
     + "  decription:" + uc.description());
    }
   }
    }
 public static void main(String[] args){
  trackUseCases(PasswordUtils.class);
 }
}

注意:如果注解中只有value一个属性,在写注意元素时,value=可以不用写。

注解元素

注解元素可用的类型如下:

所有的基本类型(int ,float,double等)

String

Class

enum

Annotation

以上类型的数组

如果你使用了其他类型编译器就会报错。

public @interface MyAnnotation{
String value();
}

enum AlarmPoints{
START1,START2,LOBBY,OFFICE1,OFFICE2;
}

import java.lang.annotation.*;
//target的参数可以用数组表示
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase{
public int id();
public String description() default "no description";
//class类型
Class clazz();
//枚举类型
AlarmPoints alarmPoints() default AlarmPoints.START1;
//注解类型
MyAnnotation myAnno() default @MyAnnotation("value");
//数组类型
int[] arrAttr() default {1,2,3};
}


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