zoukankan      html  css  js  c++  java
  • Java @Repeatable(转)

    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());
                }
            }
        }
    }
  • 相关阅读:
    nginx 部署
    win 7 系统ie浏览器升级11版本后,f12功能不可用的问题
    selenium 调用键盘按键
    selenium + python 环境搭建
    解决word2013老是打开未响应情况
    win7 64位备份时, 无法启动服务,0x80070422
    个人学习网站收集
    矩形后旋转后顶点坐标的求解
    Acrobat_8_Pro_SC 激活老是提示你输入的授权码无效
    DLL用def定义文件来导出重载函数(转)
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/15401505.html
Copyright © 2011-2022 走看看