从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

    • 反射

    • 注解

      • 什么是注解
      • 注解的本质
      • 自定义注解
        • 格式要求1 属性的返回值类型
        • 格式要求2 定义了属性,在使用时需要给属性赋值
      • 元注解
      • 注解练习
      • 注解小结
    • 集合类

    • Java
  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaSenior
  • 注解
2022-12-30
目录

自定义注解

# 02.自定义注解

属性:属性就是接口中的抽象方法

接下来我们说说定义属性的要求。

  ‍

# 格式要求1 属性的返回值类型

要定义注解的,里面的属性要有返回值类型,所以不能定义void的属性。可以有下列返回值

  • 基本数据类型
  • String
  • 枚举
  • 注解
  • 以上类型的数组

‍

例如,我们可以这样定义注解:

public @interface MyAnno2 {
  int value();
  String show2();
}
1
2
3
4

‍

‍

# 格式要求2 定义了属性,在使用时需要给属性赋值

如果只定义了注解,但是不赋值,会报错。例如我们定义一个类,使用了注解:

@MyAnno2
public class AnnoDemo3 {
  
}
1
2
3
4

‍

在还没有编译的时候,IDE就提示有错误了:

​​

‍

尝试编译,也是有报错的

javac AnnoDemo3.java
AnnoDemo3.java:1: 错误: 对于元素value,show2, 注释 @MyAnno2 缺少默认值
@MyAnno2
^
1 个错误
1
2
3
4
5

​

所以我们得赋值,属性要求什么返回值,我们就赋值什么。由于 赋值时就像给属性赋值一样(属性和属性值),所以称之为属性。

@MyAnno2(value=1, show2="str")
public class AnnoDemo3 {

}
1
2
3
4

所以我们起名字的时候,尽量让属性名看上去更像属性,例如age,name等。

‍

其他注意事项:

  • 使用注解,需要对注解里的属性进行赋值。
  • 给多个属性赋值用逗号隔开
  • 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
  • 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可,例如@MyAnno(18)​, @SuppressWarnings("all")​. 这个value属性非常特殊。
  • 给数组赋值时,值使用{}​包裹,例如strs={"abc", "bbb"}​。如果数组中只有一个值,则{}​可以省略
public @interface MyAnno3 {
  String name();
  int age() default 18;
  String[] strs();
}
1
2
3
4
5

‍

‍

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/1/17 14:47:37
注解的本质
元注解

← 注解的本质 元注解→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式