java repeatable_Java @Repeatable

查看@PropertySource注解时候,发现了@Repeatable,从来没见过的注解,学习了下;

首先介绍下@Repeatable注解: JDK1.8出现的,作用是解决一个类上不能标注重复的注解;

c0b917e06c3b3046e04496a1cfff5c52.png

当你尝试在标注重复注解时候,IDE编译器就会提示:

b532cb7104faa2a6a99ab0d0a4cd9567.png

@Repeatable相当于指向一个容器,这样就可以在注解的地方重复标注注解了;

简单的使用例子,方便自己理解:

定义这样一个场景,每个人有不同的技能,不同职业的人又有不同的技能;

定义一个注解代表拥有的技能;

import static java.lang.annotation.ElementType.*;

import static java.lang.annotation.RetentionPolicy.*;

@Documented

@Retention(RUNTIME)        //运行时注解

@Target(TYPE)            //类上的注解

@Repeatable(Skills.class)public @interfaceSkill {

String value()default "";

}

容器注解Skills

import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.*;

@Documented

@Retention(RUNTIME)

@Target(TYPE)public @interfaceSkills {

Skill[] value();

}

定义这样一个人的接口

@Skill(value="吃饭")

@Skill(value="睡觉")public interfaceHuman {

}

定义了两个人的具体实现,展示了Skills的两种不同使用方式;

@Skill("编程")

@Skill("打游戏")public class Programmer implementsHuman{

}

@Skills({@Skill("迎宾"),@Skill("上菜")})public class Waiter implementsHuman {

}

测试类:

public static voidmain(String[] args) {

Human man= newProgrammer();//Human man=new Waiter();

Set classes=new HashSet();

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());

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值