参考答案
JDK8 中增加了@Repeatable注解,是为解决同一个注解不能重复在同一类、方法、属性上使用的问题。
@Repeatable注解的使用实例:
1. 先声明一个重复注解类
package org.springmorning.demo.javabase.annotation.meta; import java.lang.annotation.Repeatable; @Repeatable(Schedules.class) public @interface Schedule { String dayOfMonth() default "first"; String dayOfWeek() default "Mon"; int hour() default 12; }
2. 再声明一个容器注解类
package org.springmorning.demo.javabase.annotation.meta; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Schedules { Schedule[] value(); }
3. 创建一个测试类
package org.springmorning.demo.javabase.annotation.meta; import java.lang.reflect.Method; @Schedule(dayOfMonth="last") @Schedule(dayOfWeek="Wed", hour=24) public class RepetableAnnotation{ @Schedule(dayOfMonth="last") @Schedule(dayOfWeek="Fri", hour=23) public void doPeriodicCleanup(){} public static void main(String[] args) throws NoSuchMethodException { Method doPeriodicCleanup = RepetableAnnotation.class.getMethod("doPeriodicCleanup"); Schedules schedules = doPeriodicCleanup.getAnnotation(Schedules.class); System.out.println("获取标记方法上的重复注解:"); for (Schedule schedule: schedules.value()){ System.out.println(schedule); } System.out.println("获取标记类上的重复注解:"); if (RepetableAnnotation.class.isAnnotationPresent(Schedules.class)){ schedules = RepetableAnnotation.class.getAnnotation(Schedules.class); for (Schedule schedule: schedules.value()){ System.out.println(schedule); } } } }
运行结果:
获取标记方法上的重复注解: @org.springmorning.demo.javabase.annotation.meta.Schedule(hour=12, dayOfMonth=last, dayOfWeek=Mon) @org.springmorning.demo.javabase.annotation.meta.Schedule(hour=23, dayOfMonth=first, dayOfWeek=Fri) 获取标记类上的重复注解: @org.springmorning.demo.javabase.annotation.meta.Schedule(hour=12, dayOfMonth=last, dayOfWeek=Mon) @org.springmorning.demo.javabase.annotation.meta.Schedule(hour=24, dayOfMonth=first, dayOfWeek=Wed)
感兴趣的童鞋可以测试下~
以上,是Java面试题【@Repeatable注解的使用】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—