• 注解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
  • 相关阅读:
    5的阶乘以及任意输入一个数的阶乘
    继入门程序后的第一篇函数调用的小程序 比较两数大小
    计算机网络01-计算机网络与因特网
    2021春招冲刺-1227 数组去重 | 响应式布局 | 媒体查询 |浏览器帧
    2021春招冲刺-1225 TCP与UDP | 单例模式 | 回流与重绘
    2021春招冲刺-1223 进程线程的通信 | 字符串是否有效 | 数组转换与展平
    2021春招冲刺-1221 进程与线程的区别 | 进程的切换 | 单链表是否相交 | 元素水平/垂直居中的方式
    左边固定,右边自适应解决方案
    mock 模拟数据在框架中的简单使用
    一个页面从输入url到加载到内容,这个过程经历了什么
  • 原文地址:https://www.cnblogs.com/ai464068163/p/2731208.html
Copyright © 2020-2023  润新知