Java 8新特性(9) 重复注解
Java 8中的注解允许在同一申明类型(类,属性,或方法)的多次使用同一个注解。
首先,我们定义一个包装注解,它包括了一个实际注解的数组
@Retention(RetentionPolicy.RUNTIME)
@interface Hints {
Hint[] value();
}
@Repeatable(Hints.class)
@Retention(RetentionPolicy.RUNTIME)
@interface Hint {
String value();
}
只要在前面加上注解名:@Repeatable
,Java 8 允许我们对同一类型使用多重注解
// 变体1:使用注解容器(老方法)
@Hints({@Hint("hint1"), @Hint("hint2")})
class Person {}
// 变体2:使用可重复注解(新方法)
@Hint("hint1")
@Hint("hint2")
class Person {}
使用变体2,Java 编译器能够在内部自动对 @Hint
进行设置。这对于通过反射来读取注解信息来说,是非常重要的。
Hint hint = Person.class.getAnnotation(Hint.class);
System.out.println(hint); // null
Hints hints1 = Person.class.getAnnotation(Hints.class);
System.out.println(hints1.value().length); // 2
Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class);
System.out.println(hints2.length); // 2
尽管我们绝对不会在 Person 类上声明 @Hints
注解,但是它的信息仍然可以通过 getAnnotation(Hints.class)
来读取。并且,getAnnotationsByType
方法会更方便,因为它赋予了所有 @Hints
注解标注的方法直接的访问权限。
其他
Java 8 API 示例:字符串、数值、算术和文件,并发:
https://wizardforcel.gitbooks.io/modern-java/content/
精简的JRE详解:
https://my.oschina.net/benhaile/blog/211804
跟OOM:Permgen说再见吧:
https://my.oschina.net/benhaile/blog/214159
StampedLock将是解决同步问题的新宠:
https://my.oschina.net/benhaile/blog/264383
Nashorn :新犀牛:
https://my.oschina.net/benhaile/blog/290276
类型注解 复杂还是便捷:
https://my.oschina.net/benhaile/blog/179642
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:Java 8新特性(9) 重复注解
文章字数:397
本文作者:Bin
发布时间:2019-03-13, 21:19:22
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2019/03/13/Java8/Java%208%E6%96%B0%E7%89%B9%E6%80%A7(9)%20%E9%87%8D%E5%A4%8D%E6%B3%A8%E8%A7%A3/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。