ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

注解-自定义注解-属性定义以及元注解

2022-08-28 20:35:27  阅读:147  来源: 互联网

标签:ElementType 自定义 public 注解 描述 属性 class Retention


自定义注解-属性定义

属性:接口中的抽象方法

  要求:

    1、属性的返回值类型

      基本数据类型

      String

      枚举

      注解

      以上类型的数组‘

枚举:

public enum Person {
    P1,P2;
}

注解:

public @interface MyAnno2 {

}
public @interface MyAnno {
    int show1();

    String show2();

    Person show3();

    MyAnno2 show4();

    String[] show5();
}

2、定义了属性,在使用是需要给属性赋值

1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值

2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可

3.数组赋值时,值使用{}包裹。如果数组只有一个值,则 {}省略

public @interface MyAnno {//自定义注解
    String name() default "张三";//default:使用此注解属性自动设为默认
int value();
Person per();//枚举
MyAnno2 my();
String[] str(); }

赋上值

@MyAnno(show1 = 1,show3 = Person.p1,show4 = @MyAnno2,show5 = {"abc","desf"})
public class Worker {
}

 

自定义元注解

 元注解:用于描述注解的注解

1.@Target :描述注解能够作用的位置

ElementType取值:

  TYPE:可以作用于类上

  METHOD:可以作用于方法上

  FIELD:可以作用于成员变量上

​ 2.@Retention:描述注解被保留的阶段

  Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到

  Retention(RetentionPolicy.CLASS):当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到

  Retention(RetentionPolicy.SOURSE):当前被描述的注解,保留到源码中,不会保留到class字节码文件中

3.@Documented:描述注解是否被抽取到api文档中

4.@Inherited:描述注解是否被子类继承

/**
 * 元注解:用于描述注解的注解
 * 1.@Target :描述注解能够作用的位置
 * ElementType取值:
 *   ElementType.TYPE:可以作用于类上
 *   ElementType.METHOD:可以作用于方法上
 *   ElementType.FIELD:可以作用于成员变量上
 * 2.@Retention:描述注解被保留的阶段
 *   Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
 *   Retention(RetentionPolicy.CLASS):当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到
 *   Retention(RetentionPolicy.SOURSE):当前被描述的注解,保留到源码中,不会保留到class字节码文件中
 * 3.@Documented:描述注解是否被抽取到api文档中
 * 4.@Inherited:描述注解是否被子类继承
 */
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//表示该MyAnno3注解只能作用于类上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno3 {

}
@MyAnno(value = 12,per = Person.P1,my = @MyAnno2,str = {"abc"})
@MyAnno3
public class Worker {

    @MyAnno3
    private String name = "abc";

    @MyAnno3
    public void show(){

    }
}
//Worker类已经被MyAnno3注解了,那么子类Teacher类自动继承该注解
public class Teacher extends Worker{
}

 

标签:ElementType,自定义,public,注解,描述,属性,class,Retention
来源: https://www.cnblogs.com/qihaokuan/p/16633446.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有