注解

2020-03-16  本文已影响0人  CherryChenR

一.概念

二.作用

1.编译检查,如@Overrid
2.编写文档,如@Author
3.代码分析(利用反射)

三.使用

1. JDK预定义注解

1.1@Deprecated

用于标识过时方法

2.自定义注解

2.1格式

2.1.1 元注解(用于描述注解的注解)
public enum ElementType {
    /** 类,接口(包括注解类型)或枚举的声明 */
    TYPE,

    /** 属性的声明 */
    FIELD,

    /** 方法的声明 */
    METHOD,

    /** 方法形式参数声明 */
    PARAMETER,

    /** 构造方法的声明 */
    CONSTRUCTOR,

    /** 局部变量声明 */
    LOCAL_VARIABLE,

    /** 注解类型声明 */
    ANNOTATION_TYPE,

    /** 包的声明 */
    PACKAGE
}
2.1.2注解声明
Public @Interface 注解名 {
   属性列表
} 
2.1.2.1 属性
Public @Interface XXX{
  String name default "萨拉瓦";
}

四.本质

注解其实是自动继承java.lang.annotation.Annotation的接口。

五.在程序中获取注解中的属性值

  1. 获取注解定义位置的对象(Field,Method,Class...)
  2. 获取指定的注解对象
    XX.getAnnotation(class)
    3.调用注解抽象方法,获取配置的值

六.特殊语法

六.特殊语法部分转载自:https://blog.csdn.net/xsp_happyboy/article/details/80987484

特殊语法一:

如果注解本身没有注解类型元素(属性),那么在使用注解的时候可以省略(),直接写为:@注解名,它和标准语法@注解名()等效!

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE})
@Documented
public @interface FirstAnnotation {
}


//等效于@FirstAnnotation()
@FirstAnnotation
public class JavaBean{
    //省略实现部分
}

特殊语法二:

如果注解本本身只有一个注解类型元素,而且命名为value,那么在使用注解的时候可以直接使用:@注解名(注解值),其等效于:@注解名(value = 注解值)

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE})
@Documented
public @interface SecondAnnotation {
  String value();
}



//等效于@ SecondAnnotation(value = "this is second annotation")
@SecondAnnotation("this is annotation")
public class JavaBean{
  //省略实现部分
}

特殊用法三:

如果注解中的某个注解类型元素是一个数组类型,在使用时又出现只需要填入一个值的情况,那么在使用注解时可以直接写为:@注解名(类型名 = 类型值),它和标准写法:@注解名(类型名 = {类型值})等效!

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE})
@Documented
public @interface ThirdAnnotation {
    String[] name();
}



//等效于@ ThirdAnnotation(name = {"this is third annotation"})
@ ThirdAnnotation(name = "this is third annotation")
public class JavaBean{
    //省略实现部分
}

特殊用法四:

如果一个注解的@Target是定义为Element.PACKAGE,那么这个注解是配置在package-info.java中的,而不能直接在某个类的package代码上面配置。

上一篇 下一篇

猜你喜欢

热点阅读