java的自定义注解

首先来段例子:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface DefaultStringValue {
  /** 默认字符串内容 */
  String value();
}

使用:

 public interface R {
    public static final R R = Resources.create(R.class);

    @DefaultStringValue(value = "所属组织不存在")
    String nullOrg();

    @DefaultStringValue(value = "指定的{0}\"{1}\"不存在。")
    String nullObject();

    @DefaultStringValue(value = "第{0}行商品{1}不存在。")
    String productNotFound();
}
那么我们在R.R.nullOrg(),就可以获得value的值。

@Target 声明注解修饰的范围。包,类,方法,参数,本地参数等目标

          1.CONSTRUCTOR:用于描述构造器
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部变量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述参数
    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@RetentionPolicy 设置注解保留的时间长短。有的只在源码中,而被编译器抛弃。有的被编译在class中,可能会被虚拟机忽略。还有一种可以在class装载时被读取。上面这个例子就是第三种了。因为需要运行时去读取。

         1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在运行时有效(即运行时保留)

@Documented 其他类型的注解被作为被标注的程序成员的公共API,就是说注解包含在javadoc中。

@Inherited 这是一个标记注解 

@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值