自定义annotation

自定义annotation格式:

定义简单annotation:

public @interface MyDefaultAnnotationArrayParam{
}

使用简单annotation:

@MyDefaultAnnotationArrayParam
class Demo{
};

此时表示在Demo类上使用annotation。

 

还可以向annotation中设置内容,使用变量接收参数。

public @interface MyDefaultAnnotationSingleParam{
    public String value() ;    // 接收设置的内容
}

在使用的时候,必须清楚指明变量的内容

@MyDefaultAnnotationSingleParam("李兴华")
class Demo{
};

或者可以使用明确标记,表示内容赋给哪个参数。

@MyDefaultAnnotationSingleParam(value="李兴华")
class Demo{
};

以上参数是赋值给value属性的,

既然可以赋值给一个参数,也可赋值给多个参数。

例如对于这个annotation

public @interface MyDefaultAnnotationMoreParam{
    public String key() ;
    public String value() ;    // 接收设置的内容
}

在使用的时候需要设置两个参数,一个是key,一个是value。

@MyDefaultAnnotationMoreParam(key="MLDN",value="李兴华")
class Demo{
};

也可以设置一个数组进去

public @interface MyDefaultAnnotationArrayParam{
    public String[] value() ;    // 接收设置的内容
}

接收内容本身应该是一个数组,类似之前的SuppressWarnings。

@MyDefaultAnnotationArrayParam(value={"MLDN","李兴华"})
class Demo{
};

以上全部annotation有一个特点,所有使用的时候使用注释的时候设置上去。

也可以为参数设置默认内容,在声明的时候使用Default即可。

public @interface MyDefaultAnnotationValue{
    public String key() default "MLDN" ;    // 指定好了默认值
    public String value() default "李兴华" ;    // 指定好了默认值
}

当使用的时候,就可以不再设置内容了。不报错,如下。

@MyDefaultAnnotationValue
class Demo{
};

 

 

操作中,对于一个annotation而言,有时候会固定其取值范围,只能取固定几个值此时需要依靠枚举

首先定义一个枚举:

public enum MyName{    // 定义枚举类型
    MLDN,LXH,LI ;
}

以后的annotation的取值只能从这三个值中取。

使用:

public @interface MyDefaultAnnotationEnum{
    public MyName name() default MyName.LXH ;    // 指定默认值,默认值是通过一个枚举变量设置,注意此时的name()的类型是枚举类型
}

以上annotation已经设置好了一个枚举中的内容作为默认值,那么外部使用此annotation的时候,也需要从枚举中固定取值

@MyDefaultAnnotationEnum(name=MyName.LI)    //因为annotation使用的是默认值,而且参数类型是枚举型,所以设置参数也是枚举型,只能从固定枚举中取值
class Demo{
};

 

retention和retentionpolicy

retentionpolicy三个取值范围,

在三个范围中,最重要的是RUNTIME,因为执行时候起作用。

使用retention制定一个annotation的范围,范围为RUNTIME范围。

import java.lang.annotation.Retention ;
import java.lang.annotation.RetentionPolicy ;
@Retention(value=RetentionPolicy.RUNTIME)    // 表示此Annotation在运行时有效
public @interface MyDefaultRententionAnnotation{
    public String name() default "李兴华" ;
}

此annotation可以在运行时候起作用,而且在以后讲解反射与annotation操作中,也必须使用此种范围。

 

 

总结

1,annotation的定义格式,以及变量类型:枚举,数组,普通变量。

2,retention,retentionPolicy的作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值