当前位置 博文首页 > 用心编码:Java 编程思想--注解
刚刚经过一段时间的实习(学院组织安排),感触很多,见识了世界500强企业,真的是很刁,所以回来就静下心来好好学习。
1.基础知识
2.代码篇
(1)定义注解,其实很简单,如果没有注解处理器的话,注解就像注释,没有太多用处。大部分时间我们使用注解是使用第三方框架或者自定义注解,那么自定义注解的话就必须自己书写注解处理器。
功能:用于跟踪一个项目中的用例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserCase {
int id();
String description() default "no description";
}
(2)注解处理器
编写注解处理器肯定就得用到java反射机制,获取使用注解的类,获取属性,获取方法等等。
public class UserCaseTracker {
public static void trackUserCases(List<Integer> userCases, Class<?> cl) {
for (Method m : cl.getDeclaredMethods()) {
UserCase uc = m.getAnnotation(UserCase.class);
if (uc != null) {
System.out.println("Find use case " + uc.id() + " ," + uc.description());
userCases.remove(new Integer(uc.id()));
}
}
for (int i : userCases) {
System.out.println("Warning:Missing use case-" + i);
}
}
public static void main(String[] args) {
List<Integer> userCases = new ArrayList<Integer>();
Collections.addAll(userCases, 47, 48, 49, 50);
trackUserCases(userCases, PasswordUtils.class);
}
}
(3)使用注解
public class PasswordUtils {
@UserCase(id = 47, description = "密码至少包含一个数字")
public boolean validatePassword(String password) {
return password.matches("\\w*\\d\\w*");
}
@UserCase(id = 48)
public String encryptPassword(String password) {
return new StringBuilder(password).reverse().toString();
}
@UserCase(id = 49, description = "新密码不能使用以前用过的任何一个密码")
public boolean checkForNewPassword(List<String> prePassword, String password) {
return !prePassword.contains(password);
}
}
3.总结
使用注解,我们需要知道:
(1)通过注解我们可以将元数据保存到java源代码中,并利用 annotation API 来构建处理工具,完成我们需要的逻辑。
(2)java 的默认注解
@Override,@Deprecated,@SuppressWarnings
(3)元注解(4种)
@Target,@Retention,@Documented,@Inherited.
(4)注解不支持继承
可以在一个注解只呢个嵌套其他注解。