自定义注解 1

时间:2020-11-30 20:44:55

知识准备:                         元注解 (不知道就手动百度咯!)

/**
 * 自定义注解
 * @author josson
 *
 */
@Documented  
@Target({ElementType.METHOD})  
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    public String name() ;//声明的注解属性:该field的名字,没有默认,必须填写
    public String sex() default "男";
    public boolean isValidate() default true;//声明的注解属性:是否需要校验
    public int maxLength() default 0;// 声明注解的属性:长度
    //注意:声明属性类型可以使基本类型(int,byte,short,long,float,double,boolean,)
    // 还可以是String ,Class,enum,Annotation,以上所有类型的数组
}


/**
 * 测试类
 * @author josson
 *
 */
/*@MyAnnotation(name = "王乐")*/
public class Test {
    @MyAnnotation(name = "丽丽", sex = "女")
    public void addLili() {

    }
    public static void main(String[] args) {
        Method[] methods = Test.class.getMethods();
        for (Method method : methods) {
            //检查方法中是否含使用了注解
            boolean isAnnotationPresent    =method.isAnnotationPresent(MyAnnotation.class);
            if (isAnnotationPresent) {
                String name = method.getName();
                System.out.println(name+"----"+"方法使用了注解"+"---");
                //获得注解属性:
                 MyAnnotation method2 = method.getAnnotation(MyAnnotation.class);
                System.out.println(method2.name()+"------"+method2.sex());
            }
        }
    }
}

结果:

false
addLili----方法使用了注解---
丽丽------女

注意:

1.用到注解,报如下错误,包导入不进来
    RetentionPolicy cannot be resolved to a variable
    ElementType cannot be resolved to a variable

@Retention和@Target都能导入进来,没办法只能手动导入包了
    import java.lang.annotation.*

    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.ElementType;
这样,RetentionPolicy/ElementType cannot be resolved to a variable问题就解决了