zoukankan      html  css  js  c++  java
  • 注解Annotation定义和使用

    摘抄 http://blog.csdn.net/chjttony/article/details/7017153 

    注解Annotation的定义和接口类似,实际上,编译器也把注解Annotationn像接口一样编译成class字节码文件。例如: 

    @Target(ElementType.METHOD)  
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface Test{}  

    (1).@Target注解: 
    用于指示注解所应用的目标程序元素种类,该注解常和ElementType枚举类型一起联合使用,ElementType枚举提供了java程序中声明的元素类型如下: 

    ANNOTATION_TYPE:注释类型声明。 
    CONSTRUCTOR:构造方法声明。 
    FIELD:字段声明(包括枚举常量)。 
    LOCAL_VARIABLE:局部变量声明。 
    METHOD:方法声明。 
    PACKAGE:包声明。 
    PARAMETER:参数声明。 
    TYPE::类,接口或枚举声明。 


    (2).@Retention注解: 
    该注解用于指示所定义的注解类型的注释在程序声明周期中得保留范围,该注解常和RetentionPolicy枚举联合使用。RetentionPolicy枚举常量定义了注解在代码中的保留策略: 

    CLASS:编译器把注解记录在类文件中,但在运行时JVM不需要保留注解。 
    RUNTIME:编译器把注解记录在类文件中,在运行时JVM将保留注解,因此可以通过反射机制读取注解。 
    SOURCE:仅保留在源码中,编译器在编译时就要丢弃掉该注解

    (3) eg

    UseCase引用

    public class PasswordUtils{  
        @UseCase(id = 47, description = “Passwords must contain at least one numeric”)  
        public Boolean validatePassword(String password){  
            return (password.mathes(“\\w*\\d\\w*”));  
     
    @UseCase(id = 48)  
    public String encryptPassword(Srring password){  
        return new StringBuilder(password).reverse()/toString();  
     
    @UseCase(id = 49, description = “New passwords can’t equal previously used ones”)  
    public Boolean checkForNewPassword(List<String> prevPasswords, String password){  
        return !prevPasswords.contains(password);  
     

    注解遍历
    import java.lang.reflect.*; 
    import java.util.*; 
    public class UseCaseTracker{ 
    public static void traceUseCases(List<Integer> useCases, Class<?> clazz){ 
    //获取指定类中所有声明的方法 
    for(Method m : clazz.getDeclaredMethods()){ 
    //获取方法上指定类型的注解 
    UseCase uc = m.getAnnotation(UseCase.class); 
    if(uc != null){ 
    System.out.println(“Found Use Case:” + uc.id() + “ ” + uc.description()); 
    useCases.remove(new Integer(uc.id())); 
    } 
    } 
    for(int i : useCases){ 
    System.out.println(“Warning: Missing use case-” + i); 
    } 
    } 
    public static void main(String[] args){ 
    List<Integer> useCases = new ArrayLis<Integer>(); 
    Collections.addAll(useCases, 47, 48, 49, 50); 
    trackUseCases(useCases, PasswordUtils.class); 
    } 
    } 

    http://www.cnblogs.com/yaozhongxiao/p/4050293.html 这篇介绍也挺好的

    http://www.oracle.com/technetwork/java/javase/downloads/index.html
  • 相关阅读:
    arcgis要素转json
    GeoJSON.js:221 Uncaught Error: Invalid GeoJSON object.
    深入学习SAP UI5框架代码系列之一:UI5 Module的懒加载机制
    SAP Spartacus简介
    金庸逝世两周年纪念日:一个失意程序员的呓语
    一个用于SAP UI5学习的脚手架应用,没有任何后台API的依赖
    通过最简单的button控件,深入学习SAP UI5框架代码系列之零
    如何使用SAP UI5 SDK网站查询指定控件的属性如何使用
    一行代码将SAP CDS view数据以ALV的方式输出
    演讲预告:一个月的住院经历,我悟到了哪些和程序员职场发展相关的心得
  • 原文地址:https://www.cnblogs.com/ai464068163/p/2731208.html
Copyright © 2011-2022 走看看