Java 8新特性(9) 重复注解

  1. 其他

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" 转载请保留原文链接及作者。

目录