• java注解(Annotation)的简单介绍


        注解你可以理解为一个特殊的类,或者接口其自定义个格式形如

    public @interface 注解名(){

    //注解的属性,特别提醒当注解的属性为value时,在对其赋值时,可以不写value,而直接写上值即可。

    }

    下面一个例子讲述了注解的基本应用:(这个例子中A代表一个注解类,写一个D注解的目的是说明一个注解类中可以有注解这个属性。B代表应用了注解类的类,C代表对应用了注解类的类进行反射操作的类。)

    代码如下://定义一个注解D(D的作用只是为了说明A中可以有一个注解的属性)

    package com.qls.theoryIntroduce2;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface D {
    String[] people() default{"王昭君","西施","阴丽华"};
    }

    //定义一个注解类A

    package com.qls.theoryIntroduce2;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    /**特别说明当一个类引用一个注解时,(如B类引用A注解时)A注解中没有默认值的元素必须要赋值。
    *
    * 从下面的定义中可以看出A注解中的内容包括:int型带有默认值。
    * int型不带有默认值(在一个类中用了A注解,A必须要给caocao这个元素赋一个值)
    * 数组,以及注解。
    *
    * @author 秦林森
    *
    */

    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface A {
    int liubei() default 2;
    int caocao();
    String[] sunquan() default {"1","2","3","4"};
    int[] xiaoqiao();
    D daqiao() default @D;
    }

    //定义一个应用注解的类B

    package com.qls.theoryIntroduce2;
    @A(caocao=1,xiaoqiao={8,9,10})
    public class B {
    }

    //定义一个对应用注解的类进行反射操作的类:

    package com.qls.theoryIntroduce2;

    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;

    /**
    * A注解的内容全部都取出来(这里需要用到反射)
    * @author 秦林森
    *
    */
    public class C {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    //首选判断B类中是否有A注解:
    System.out.println(B.class.isAnnotationPresent(A.class));
    /**
    * 返回结果为true,说明有,但是在A注解中必须有一个元注解
    * @Retention(RetentionPolicy.RUNTIME)否则,返回结果为false.
    */
    //取出A注解中的值:
    A annot = B.class.getAnnotation(A.class);
    //取出caocao的值
    int caocao = annot.caocao();
    System.out.println("caocao="+caocao);
    //取出daqiao的值
    System.out.println("daqiao的值是:");//newline
    for(String str:annot.daqiao().people()){
    System.out.print(str+" ");
    }
    System.out.println();
    //取出liubei
    int liubei = annot.liubei();
    System.out.println("liubei="+liubei);
    //取出xiaoqiao的值
    System.out.println("xiaoqiao的值是:");
    for(int xiaoqiao:annot.xiaoqiao()){
    System.out.print(xiaoqiao+" ");
    }
    //取出孙权的值是:
    System.out.println();
    System.out.println("sunquan的值是:");
    for(String sunquan:annot.sunquan()){
    System.out.print(sunquan+" ");
    }
    }
    }/*Output:
    true
    caocao=1
    daqiao的值是:
    王昭君 西施 阴丽华
    liubei=2
    xiaoqiao的值是:
    8 9 10
    sunquan的值是:
    1 2 3 4 *///:~

  • 相关阅读:
    iOS 跳转app
    Mac下安装Redis图解教程
    高性能图文混排框架,构架顺滑的iOS应用-b
    iOS的layoutSubviews和drawRect方法何时调用
    类似nike+、香蕉打卡的转场动画效果-b
    开源YYKit-b
    轻仿QQ音乐之音频歌词播放、锁屏歌词-b
    数据库事务的四大特性
    拦截器的实现
    ognl表达式
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/6125105.html
Copyright © 2020-2023  润新知