我是靠谱客的博主 懵懂热狗,最近开发中收集的这篇文章主要介绍Java 8新特性#可重复的注解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在实际应用中,可能会出现需要对同一个声明式或者类型加上相同的 Annotation(包含不同的属性值)的情况。
例如系统中除了管理员之外,还添加了超级管理员这一权限,对于某些只能由这两种角色调用的特定方法,可以使用 Repeating Annotation。
[清单 3. Repeating Annotation 使用示例-1]

 @Access(role="SuperAdministrator")
 @Access(role="Administrator")
 public void doCheck() { 
             
 }

上面的示例是针对方法使用 Annotation, 开发者也可以根据产品中的具体需求在其他地方使用 Repeating Annotation。例如某个类专门提供管理员相关的功能,可以直接在这个类上标注同样的 Annotation。

@Access(role="SuperAdministrator")
@Access(role="Administrator")
public class AdminServices{
}

之前版本的 JDK 并不允许开发者在同一个声明式前加注同样的 Annotation,(即使属性值不同)这样的代码在编译过程中会提示错误。而 Java 8 解除了这一限制,开发者可以根据各自系统中的实际需求在所有可以使用 Annotation 的地方使用 Repeating Annotation。
由于兼容性的缘故,Repeating Annotation 并不是所有新定义的 Annotation 的默认特性,需要开发者根据自己的需求决定新定义的 Annotation 是否可以重复标注。Java 编译器会自动把 Repeating Annotation 储存到指定的 Container Annotation 中。而为了触发编译器进行这一操作,开发者需要进行以下的定义:
首先,在需要重复标注特性的 Annotation 前加上 @Repeatable 标签,示例如下:
[清单 5. 定义 Repeating Annotation 示例]

@Repeatable(AccessContainer.class)
public @interface Access {
        String role();
}

@Repeatable 标签后括号中的值即为指定的 Container Annotation 的类型。在这个例子中,Container Annotation 的类型是 AccessContainer,Java 编译器会把重复的 Access 对象保存在 AccessContainer 中。
AccessContainer 中必须定义返回数组类型的 value 方法。数组中元素的类型必须为对应的 Repeating Annotation 类型。具体示例如下:
[清单 6. 定义 Container Annotation 示例]

public @interface AccessContainer {
       Access[] value();
}

可以通过 Java 的反射机制获取注解的 Annotation。一种方式是通过 AnnotatedElement 接口的 getAnnotationByType(Class) 首先获得 Container Annotation,然后再通过 Container Annotation 的 value 方法获得 Repeating Annotation。另一种方式是用过 AnnotatedElement 接口的 getAnnotations(Class) 方法一次性返回 Repeating Annotation。
Repeating Annotation 使得开发者可以根据具体的需求对同一个声明式或者类型加上同一类型的注解,从而增加代码的灵活性和可读性。
转自:Java 8 Annotation 新特性在软件质量和开发效率方面的提升

最后

以上就是懵懂热狗为你收集整理的Java 8新特性#可重复的注解的全部内容,希望文章能够帮你解决Java 8新特性#可重复的注解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部