自定义注解的属性定义和元注解

自定义注解的属性定义

属性:接口中的抽象方法

  要求:

    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 {
    int show1();
    //设置mo
    String show2() default "张三";

    Person show3();

    MyAnno2 show4();

    String[] show5();
}
复制代码
@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取值:
  TYPE:可以作用于类上
  METHOD:可以作用于方法上
  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(show1 = 1,show3 = Person.p1,show4 = @MyAnno2,show5 = {"abc","desf"})
@MyAnno3
public class Worker {
    @MyAnno3
    public String name = "aaa";
}
package com.example.com.StrengThen.annotation;

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

 

posted @   xjw12345  阅读(387)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示