吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2351|回复: 1
收起左侧

[Java 转载] 注解(一)

[复制链接]
NullPointer 发表于 2016-12-7 16:00
摘要:自定义注解、自定义注解的使用、自定义注解的处理一、注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。
二、注解也会编译成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);
        }
}



发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| NullPointer 发表于 2016-12-7 16:55

准备好好复习复习注解,都是一些基础,没有高深的东西,共同学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 11:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表