JDK8新特性:重复注解Repeating Annotations
来源:互联网 发布:java中线程之间的通信 编辑:程序博客网 时间:2024/04/30 02:04
注解并不是什么新鲜东西了,比如spring中存在大量注解简化我们的配置。但是在JDK8之前,我们是不能使用重复注解的,即某个位置相同注解只能出现一次。
比如我们想编写一个定时任务的注解,使用者可以配置在每天哪一小时触发,而且允许用户配置多个时间。传统做法是:
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface TraditionalAnnoSchedule { int[] hour() default {0};}
@TraditionalAnnoSchedule(hour = {0, 8, 12})public class Target { public static void main(String[] args) { TraditionalAnnoSchedule[] annotations = Target.class.getAnnotationsByType(TraditionalAnnoSchedule.class); for (TraditionalAnnoSchedule each : annotations) { System.out.println(Arrays.toString(each.hour())); } }}
上面是比较传统的做法,下面我们使用JDK8的重复注解特性改造下上面的注解。
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Schedules { Schedule[] value();}// JDK8新增的@Repeatable@Repeatable(Schedules.class)public @interface Schedule { int hour() default 0;}
@Schedule(hour = 0)@Schedule(hour = 8)@Schedule(hour = 12)public class Target { public static void main(String[] args) { // 推荐的方式 Schedule[] annotations = Target.class.getAnnotationsByType(Schedule.class); for (Schedule each : annotations) { System.out.println(each.hour()); } // 老的方式 Schedule[] schedules = Target.class.getAnnotation(Schedules.class).value(); for (Schedule each : schedules) { System.out.println(each.hour()); } }}
这里有个使用@Repeatable( Schedules.class )的注解类Schedule,Schedules仅仅是Schedule注解的数组,但Java编译器并不想让程序员意识到Schedules的存在。这样对使用者而言,Target就拥有了两个Schedule注解,而不是1个Schedules注解。同时,反射相关的API提供了新的函数getAnnotationsByType()来返回重复注解的类型。
0 0
- JDK8新特性:重复注解Repeating Annotations
- Java 8新特性探究(五)重复注解(repeating annotations)
- Java 8新特性探究(五):重复注解(repeating annotations)
- JDK8新特性之重复注解
- jdk8新特性
- JDK7、JDK8新特性
- JDK8新特性
- JDK8新特性-Lambda
- JDK8新特性-Stream
- JDK8新特性
- JDK8新特性
- jdk8新特性
- JDK8新特性--Stream
- JDK8新特性
- jdk8 新特性
- JDK8新特性介绍
- jdk8新特性
- jdk8新特性
- 从零开始的RxJava2.0教程(三)响应式的好处
- VM搭建nginx+tomcat负载均衡
- linux 下tomcat日志控制台乱码
- 嵌入式Linux驱动开发(一)一个简单的Linux内核模块框架
- Java学习笔记--输入/输出
- JDK8新特性:重复注解Repeating Annotations
- 为通过 ATS 检测 Tomcat 完全 TLS v1.2、完全正向加密及其结果检验
- Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单
- Fragment预加载+数据初始化
- SpringAOP的CGLIB动态代理的底层原理实现
- controller中多用户并发时候,每个用户使用完参数化中的数据不在重复使用且每个用户不使用相同参数化数据的方法
- mybatis mapper遇到问题
- gentle里面的py文件
- 重启php