美文网首页
Java注解基础

Java注解基础

作者: melodylzl | 来源:发表于2019-11-02 17:10 被阅读0次

注解的本质

注解的本质就是一个继承了Annotation接口的接口

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {

}

这是注解 @Override 的定义,其实它本质上就是:

public interface Override extends Annotation{
    
}

元注解

元注解就是修饰注解的注解,Java中有以下几个元注解:

  • @Target:注解的作用目标
  • @Retention:注解的生命周期
  • @Documented:注解是否应当被包含在 JavaDoc 文档中
  • @Inherited:是否允许子类继承该注解

@Target的几个枚举值:

  • ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上
  • ElementType.FIELD:允许作用在属性字段上
  • ElementType.METHOD:允许作用在方法上
  • ElementType.PARAMETER:允许作用在方法参数上
  • ElementType.CONSTRUCTOR:允许作用在构造器上
  • ElementType.LOCAL_VARIABLE:允许作用在本地局部变量上
  • ElementType.ANNOTATION_TYPE:允许作用在注解上
  • ElementType.PACKAGE:允许作用在包上

@Retention的几个枚举值:

  • RetentionPolicy.SOURCE:当前注解编译期可见,不会写入 class 文件
  • RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件
  • RetentionPolicy.RUNTIME:永久保存,可以反射获取

JAVA 的内置三大注解

  • @Override: 标记方法是重载父类
  • @Deprecated:标记类或方法或字段过期,不推荐使用
  • @SuppressWarnings:压制Java的警告

自定义注解

定义

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String   value();
    String   name();
    int      age();
    String[] newNames();
}

使用

@MyAnnotation(
    value="123",
    name="Jakob",
    age=37,
    newNames={"Jenkov", "Peterson"}
)
public class MyClass {


}

参考文献:

相关文章

网友评论

      本文标题:Java注解基础

      本文链接:https://www.haomeiwen.com/subject/qxkhbctx.html