NullPointer 发表于 2016-12-7 16:00

注解(一)

摘要:自定义注解、自定义注解的使用、自定义注解的处理一、注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。
二、注解也会编译成class

1、自定义注解:
/*
* 1.表示该注解可以用在什么地方
* 2.CONSTRUCTOR:构造器
*   FIELD:全局变量包括enum实例
*   LOCAL_VARIABLE:局部变量
*   METHOD:方法
*   PACKAGE:包
*   PARAMETER:参数
*   TYPE:类、接口(包括注解类型)或者enum
*/
@Target(ElementType.METHOD)
/*
* 1.表示需要在什么级别保存该注解信息
* 2.SOURCE:注解将被编译器丢弃
*   CLASS:在class文件可用,但会被VM丢弃
*   RUNTIME:VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息
*/
@Retention(RetentionPolicy.RUNTIME)
//@Documented:将此注解包含在Javadoc中
//Inherited:允许子类继承父类中的注解
public @interface UseCase {
      //两个方法
      public int id();
      //default:默认值,若使用注解的时候未指定description值,则采取默认值
      public String description() default "no description";
}
2、自定义注解的使用
/**
* 测试注解
*
* @author TongWei.Chen
* @date 2016年12月7日15:44:37
*/
public class PasswordUtils {
      
      @UseCase(id = 47, description = "47description")
      public boolean validatePassword(String password) {
                return (password.matches("\\w*\\d\\w*"));
      }
      
      //description为默认值
      @UseCase(id = 48)
      public String encryptPassword(String password) {
                return new StringBuilder(password).reverse().toString();
      }
      
      @UseCase(id = 49, description = "49description")
      public boolean checkForNewPassword(List<String> prevPasswords, String password) {
                return ! prevPasswords.contains(password);
      }
}
3、注解的处理
/**
* 注解处理器
*
* @author TongWei.Chen
* @date 2016年12月7日15:23:00
*/
public class UseCaseTracker {
      
      /**
         * 核心处理方法
         * @param useCases
         * @param c
         */
      public static void trackUseCases(List<Integer> useCases, Class<?> c) {
                for(Method method : c.getDeclaredMethods()) {
                        UseCase useCase = method.getAnnotation(UseCase.class);
                        if(null != useCase) {
                              System.out.println("id=" + useCase.id() + " , description=" + useCase.description());
                              useCases.remove(new Integer(useCase.id()));
                        }
                }
                for(int i : useCases) {
                        System.out.println("Missing use case-" + i);
                }
      }
      public static void main(String[] args) {
                List<Integer> useCases = new ArrayList<Integer>();
                Collections.addAll(useCases, 47, 48, 49, 50);
                trackUseCases(useCases, PasswordUtils.class);
      }
}



NullPointer 发表于 2016-12-7 16:55

rao1984 发表于 2016-12-7 16:49
感谢分享

准备好好复习复习注解,都是一些基础,没有高深的东西,共同学习
页: [1]
查看完整版本: 注解(一)