就好像老师说的注解是一个学生挂了一个牌子,证明是本学校的,注解的属性就是牌子是什么颜色,用于区分你是哪个年级的,接下来介绍具体的应用。
大多数的时候,是定义自己的注解,并编写自己的处理器来出来他们。
比如一个举个例子:写一个简单的注解,我们可以用它来跟踪一个项目中的用例。如果一个方法或一组方法实现了某个用例的需求,那么加上注解后,就很容易知道项目进展到哪
- @target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNIME)
- public @interface UseCase{
- public int id();
- public String description default"no description"
- }
复制代码- public class PasswordUtils{
- @UseCase(id=47, description="Passwords must contain at least one numeric")
- public boolean validatePassword(String password){
- return (password.matches("\\w*\\d\\w*"));
- }
- @UseCase(id=48)
- public String encryptPassword(String password){
- return new StringBuilder(password).reverse().toString();
- }
- }
- }
复制代码
下面的程序是用来处理注解的,需要用到反射
- public class UseCaseTracker{
- public static void TrackUseCases(List<Integer> useCases, Class<?> cl){
- for(Method m: c1.getDeclaredMethods()){
- UseCase uc =m.getAnnotation(UseCase.calss);
- 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<Integer>();
- Collections.addAll(useCases, 47,48);
- trackUseCases(useCases, PasswordUtils.class);
- }
- }
复制代码 |