编写Java批注

Java 批注的允许的属性类型刻意非常严格,但是允许的类型也可以使用一些简洁的复合批注类型。

考虑教程站点中的示例注释:

package annotation;
@interface ClassPreamble {
   String author();
   String[] reviewers();
}

在这里,作者和审阅者具有String和array类型,这与允许的批注属性类型保持一致。 以下是允许的类型的完整列表(从Java 7开始):

  • 任何对Class的参数化调用
  • 枚举类型
  • 注释类型,请注意不允许循环,带注释的类型不能引用自身
  • 一个数组类型,其元素类型为上述类型之一。

现在,要使功能更丰富的ClassPreable,请考虑以这种方式定义的另外两种注释类型:

package annotation;

public @interface Author {
 String first() default '';
 String last() default '';
}

package annotation;

public @interface Reviewer {
 String first() default '';
 String last() default '';
}

有了这些,ClassPreamble可以由更丰富的Author和Reviewer批注类型组成,方法是:

package annotation;
@interface ClassPreamble {
   Author author();
   Reviewer[] reviewers();
}

现在,应用于类的注释如下所示:

package annotation;

@ClassPreamble(author = @Author(first = 'John', last = 'Doe')
    , reviewers = {@Reviewer(first = 'first1', last = 'last1'), @Reviewer(last = 'last2') }
)
public class MyClass {
....
}

这是一个人为设计的示例,仅用于演示注释的组成,但是该方法广泛用于现实世界中的注释,例如,用于定义两个JPA实体之间的多对多关系:

@ManyToMany
    @JoinTable(name='Employee_Project',
          joinColumns=@JoinColumn(name='Employee_ID'),
          inverseJoinColumns=@JoinColumn(name='Project_ID'))
    private Collection<Project> projects;

参考:all和其他博客上撰写我们JCG合作伙伴 Biju Kunjummen的Java注释

翻译自: https://www.javacodegeeks.com/2012/12/composing-java-annotations.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值