zoukankan      html  css  js  c++  java
  • 自定义注解

    示例出自《java编程思想》

    自定义注解:

    package demo;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface UseCase {
    	public int id();
    	public String description() default "no description";
    
    }
    

    注解处理器:

    package demo;
    
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    //注解处理器 使用反射机制查找@UseCase标记
    public class UseCaseTracker {
    	public static void trackUseCases(List<Integer> useCases, Class<?> cl){
    		for(Method m: cl.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 ArrayList<>();
    		Collections.addAll(useCases, 47,48,49,50);
    		trackUseCases(useCases, PasswordUtils.class);
    	}
    }
    

    // 输出结果:
    // Found Use Case:49 password muset contain at least one numeric
    // Found Use Case:47 password muset contain at least one numeric
    // Found Use Case:48 password muset contain at least one numeric
    // Warning: Missing use case-50

    注解示例:

    package demo;
    
    public class PasswordUtils {
    
    	@UseCase(id=47, description="password muset contain at least one numeric")
    	public boolean validatePassword(String password){
    		return (password.matches("\w*\d\w*"));
    	}
    
    	@UseCase(id=48, description="password muset contain at least one numeric")
    	public boolean encryptPassword(String password){
    		return (password.matches("\w*\d\w*"));
    	}
    	
    	@UseCase(id=49, description="password muset contain at least one numeric")
    	public boolean checkForNewPassword(String password){
    		return (password.matches("\w*\d\w*"));
    	}
    }
    
    
  • 相关阅读:
    call/cc 总结 | Scheme
    用call/cc合成所有的控制流结构
    词法作用域 vs 动态作用域
    数论部分第二节:埃拉托斯特尼筛法
    1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
    C++面向对象作业1
    数论部分第一节:素数与素性测试【详解】
    基数排序与桶排序,计数排序【详解】
    计蒜客:百度的科学计算器(简单)【python神解】
    优质免费在线学习网站【自用】
  • 原文地址:https://www.cnblogs.com/zwch/p/10819486.html
Copyright © 2011-2022 走看看