注解(一)
摘要:自定义注解、自定义注解的使用、自定义注解的处理一、注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。二、注解也会编译成class
1、自定义注解:
/*
* 1.表示该注解可以用在什么地方
* 2.CONSTRUCTOR:构造器
* FIELD:全局变量包括enum实例
* LOCAL_VARIABLE:局部变量
* METHOD:方法
* PACKAGE:包
* PARAMETER:参数
* TYPE:类、接口(包括注解类型)或者enum
*/
@Target(ElementType.METHOD)
/*
* 1.表示需要在什么级别保存该注解信息
* 2.SOURCE:注解将被编译器丢弃
* CLASS:在class文件可用,但会被VM丢弃
* RUNTIME:VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息
*/
@Retention(RetentionPolicy.RUNTIME)
//@Documented:将此注解包含在Javadoc中
//Inherited:允许子类继承父类中的注解
public @interface UseCase {
//两个方法
public int id();
//default:默认值,若使用注解的时候未指定description值,则采取默认值
public String description() default "no description";
}
2、自定义注解的使用
/**
* 测试注解
*
* @author TongWei.Chen
* @date 2016年12月7日15:44:37
*/
public class PasswordUtils {
@UseCase(id = 47, description = "47description")
public boolean validatePassword(String password) {
return (password.matches("\\w*\\d\\w*"));
}
//description为默认值
@UseCase(id = 48)
public String encryptPassword(String password) {
return new StringBuilder(password).reverse().toString();
}
@UseCase(id = 49, description = "49description")
public boolean checkForNewPassword(List<String> prevPasswords, String password) {
return ! prevPasswords.contains(password);
}
}
3、注解的处理
/**
* 注解处理器
*
* @author TongWei.Chen
* @date 2016年12月7日15:23:00
*/
public class UseCaseTracker {
/**
* 核心处理方法
* @param useCases
* @param c
*/
public static void trackUseCases(List<Integer> useCases, Class<?> c) {
for(Method method : c.getDeclaredMethods()) {
UseCase useCase = method.getAnnotation(UseCase.class);
if(null != useCase) {
System.out.println("id=" + useCase.id() + " , description=" + useCase.description());
useCases.remove(new Integer(useCase.id()));
}
}
for(int i : useCases) {
System.out.println("Missing use case-" + i);
}
}
public static void main(String[] args) {
List<Integer> useCases = new ArrayList<Integer>();
Collections.addAll(useCases, 47, 48, 49, 50);
trackUseCases(useCases, PasswordUtils.class);
}
}
rao1984 发表于 2016-12-7 16:49
感谢分享
准备好好复习复习注解,都是一些基础,没有高深的东西,共同学习
页:
[1]