Java注解

注解

1、注解(元数据)可以提供用来完整地描述程序所需的信息,这些信息是无法使用Java来表达的;能够将以编译器来测试和验证的格式,储存有关程序的额外信息;

2、注解的语法除了@符号以外,基本与Java固有的语法一致,Java SE5在java.lang内置了3种标准注解和4种元注解:
(1)标准注解:
@Override:表示当前的方法定义将覆盖超类中的方法,当方法签名对不上被覆盖方法时,编译器会发出错误的提示;
@Deprecated:如果程序员使用了注解为它的元素,编译器会发出警告信息;
@SuppressWarnings:关闭不当的编译器信息;
(2)元注解:负责注解其他注解;

(3)注解元素
注解元素中可用的类型如下:
①所有的基本类型(int,float,boolean等);
②String
③Class
④enum
⑤Annotation


3、定义注解
(1)Java的注解定义和接口很相似,与其他任何Java接口一样,注解也会被编译成.class文件;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase{
     public int id() default -1;
     public String description() default "no description";
}
(2)元素不能有不确定的值,元素必须要有默认值,要么要在使用注解时提供元素的值,在定义默认值时,不能使用null;


4、注解的使用
public class PasswordUtils{
     @UseCase(id = 47,description = "Password must contain at least one numeric")
     public boolean validatePassWord(String password){
          return (password.matches("\\w*\\d\\w*"));
     }
     @UseCase(id = 48,description)
     public String encryptPassWord(String password){
          return new StringBuilder(password).reverse().toString();
     }
     @UseCase(id = 49,descirption = "New password can't euqal previously used ones")
     public boolean checkForNewPassword(List<String> prePasswords, String password){
          return !prePaswords.contains(password);
     }
}



5、编写注解提取器
public class UseCaseTracker{
     /*useCases记录所有待检查UseCase注解的编号,type为待提取UseCase注解的类文件,
          同时检验在useCases上有哪些注解不存在与type上面;*/
     public static void trackUseCast(List<Integer> useCases,Class<?> type){     
          for(Method method : type.getDeclaredMethods()){          //获取type类上的所有方法
                UseCase uc = method.getAnnotation(UseCase.class);    //获取每一个方法上的UseCase注解    
               if(uc != null)
                    System.out.println("Founds Use Case : "+uc.id() +" "+uc.description() );
               useCases.remove(new Integer(uc.id()));          //排除useCases上以检查的UseCase注解
          }
          for(int i : useCases )
               System.out.println("Warning : Missing use case "+ i);     //打印所有没有被检查到的UseCase注解
     }
     //Test
     public static void main(){
          List<Integer> useCases = new ArrayList<Integer>();
          Collections.addAll(useCases,47,48,49,50);
          trackUseCases(useCases,PasswordUtil.class);
     }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值