Java @Repeatable(转)
2023-09-14 08:58:45 时间
add by zhj: 使用@Repeatable的注解,只有在定义时需要指定@Repeatable的参数,注解容器,即下面的Skills。在使用注解时,并不会用到注解容器。
所以我建议使Programmer类那种注解方法,更简洁,而不建议使用Waiter类那种注解方式。
原文作者:lvbinbin2yujie
原文链接:https://www.cnblogs.com/lvbinbin2yujie/p/10291602.html
查看@PropertySource注解时候,发现了@Repeatable,从来没见过的注解,学习了下;
首先介绍下@Repeatable注解: JDK1.8出现的,作用是解决一个类上不能标注重复的注解;
当你尝试在标注重复注解时候,IDE编译器就会提示:
@Repeatable相当于指向一个容器,这样就可以在注解的地方重复标注注解了;
简单的使用例子,方便自己理解:
定义这样一个场景,每个人有不同的技能,不同职业的人又有不同的技能;
定义一个注解代表拥有的技能;
import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; @Documented @Retention(RUNTIME) //运行时注解 @Target(TYPE) //类上的注解 @Repeatable(Skills.class) public @interface Skill { String value() default ""; }
容器注解Skills
import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; @Documented @Retention(RUNTIME) @Target(TYPE) public @interface Skills { Skill[] value(); }
定义这样一个人的接口
@Skill(value="吃饭") @Skill(value="睡觉") public interface Human { }
定义了两个人的具体实现,展示了Skills的两种不同使用方式;
@Skill("编程") @Skill("打游戏") public class Programmer implements Human{ } @Skills({@Skill("迎宾"),@Skill("上菜")}) public class Waiter implements Human { }
测试类:
public class Main { public static void main(String[] args) { Human man = new Programmer(); // Human man = new Waiter(); List<Class> classes = new ArrayList<>(); classes.addAll(Arrays.asList(man.getClass().getInterfaces())); classes.add(man.getClass()); for (Class<?> clazz : classes) { Skill[] skills = clazz.getAnnotationsByType(Skill.class); for (Skill skill : skills) { System.out.println("他会:" + skill.value()); } } } }
相关文章
- arraylist扩容是创建新数组吗 java_arraylist扩容机制要怎么实现?arraylist怎么扩容…「建议收藏」
- cmd中javac和java使用及注意事项
- 轻松学习java可重入锁(ReentrantLock)的实现原理
- java WebSocket客户端断线重连 | 实用代码框架「建议收藏」
- .NET 中使用类似于 Java Math.nextUp
- 手动部署java项目到k8s中
- 邀请码生成器Java代码详解编程语言
- Java实现各种排序与查找详解编程语言
- 处理解决Redis中Java无限期数据过期管理(redisjava过期)
- Oracle和Java结合成功的编程武器(jave oracle)
- 封装了一个Java数据库访问管理类
- 用Java正则去掉字符串中重复出现的字符
- Java随机取字符串的工具类
- 一个JAVA小项目--Web应用自动生成Word