java自定义注解

申明自定义注解需要用元注解指定注解的范围,使用到的两个元注解:

@Retention

@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS),默认的,注解在class字节码文件中存在,运行时无法获得
@Retention(RetentionPolicy.RUNTIME),注解在class字节码文件中存在,在运行时通过反射获得

@Target
@Target(ElementType.TYPE) 作用接口、类、枚举、注解
@Target(ElementType.FIELD) 作用属性字段、枚举的常量
@Target(ElementType.METHOD) 作用方法
@Target(ElementType.PARAMETER) 作用方法参数
@Target(ElementType.CONSTRUCTOR) 作用构造函数
@Target(ElementType.LOCAL_VARIABLE)作用局部变量
@Target(ElementType.ANNOTATION_TYPE)作用于注解
@Target(ElementType.PACKAGE) 作用于包
@Target(ElementType.TYPE_PARAMETER) 作用于类型泛型
@Target(ElementType.TYPE_USE) 类型使用.可以用于标注任意类型除了 class
 

新建自定义注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {

    public String name();

    public String[] address();
}

使用自定义注解并解析:

       通过反射获取到使用该注解的方法,进而获得该注解中的值

public class MyAnnotationTest {
    @MyAnnotation(name="张三",address = {"湖北省","武汉市"})
    public String getUser(){
        return "";
    }

    public static void main(String[] args) throws NoSuchMethodException {
        Class c = MyAnnotationTest.class;
        Method m = c.getMethod("getUser",null);
        if(m!=null){
            //判断方法是否有某个注解
            if(m.isAnnotationPresent(MyAnnotation.class)){
​​​​​​​                //获得注解对象
                MyAnnotation myAnnotation = m.getAnnotation(MyAnnotation.class);
                System.out.println(myAnnotation.name());
                Stream.of(myAnnotation.address()).forEach(a->{
                    System.out.println(a);
                });
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值