java注解基础

来源:互联网 发布:橙光 闪艺 知乎 编辑:程序博客网 时间:2024/06/02 03:22

java注解

了解注解是什么东西,注解的应用

@Document

**注解是否将包含在JavaDoc中**

@Retention

**表示一个注解的生命周期**RetentionPolicy.SOURCE 编译期掉弃,过完编译期不再有任何意义RetentionPolicy.CLASS 在类加载的时候丢弃RetentionPolicy.RUNTION 不会丢弃

@Target

**表示注解用在什么地方**ElementType.TYPE:用于描述类、接口或enum声明ElementType.FIELD:用于描述实例变量ElementType.METHOD ElementType.PARAMETERElementType.CONSTRUCTORElementType.LOCAL_VARIABLEElementType.ANNOTATION_TYPE 另一个注释ElementType.PACKAGE 用于记录java文件的package信息

@Inherited

**定义该注释和子类的关系**

应用

通过反射可以获取注解中的数据

例子:

定义一个注解

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface UseCase {      public String 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 static void main(String[] args) {     List<Integer> useCases = new ArrayList<Integer>();     Collections.addAll(useCases, 47, 48, 49, 50);     trackUseCases(useCases, PasswordUtils.class); } 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);     } }
0 0