Java 注释 ElementType 常量是什么意思?

2022-08-31 14:52:11

java.lang.annotation.ElementType

程序元素类型。此枚举类型的常量提供 Java 程序中声明元素的简单分类。这些常量与 Target 元批注类型一起使用,以指定在何处合法使用批注类型。

有以下常量:

  • ANNOTATION_TYPE - 注释类型声明
  • 构造函数 - 构造函数声明
  • FIELD - 字段声明(包括枚举常量)
  • LOCAL_VARIABLE - 局部变量声明
  • 方法 - 方法声明
  • 包裹 - 包裹声明
  • 参数 - 参数声明
  • TYPE - 类、接口(包括注释类型)或枚举声明

有人可以解释它们中的每一个是什么(它们在实际代码中被注释的地方)吗?


答案 1

假设您指定的注释称为:ElementTypeYourAnnotation

  • ANNOTATION_TYPE - 批注类型声明。注意:这在其他注释中进行

    @YourAnnotation
    public @interface AnotherAnnotation {..}
    
  • 构造函数 - 构造函数声明

    public class SomeClass {
        @YourAnnotation
        public SomeClass() {..}
    }
    
  • FIELD - 字段声明(包括枚举常量)

    @YourAnnotation
    private String someField;
    
  • LOCAL_VARIABLE - 局部变量声明。注意:这不能在运行时读取,因此它仅用于编译时的内容,例如注释。@SuppressWarnings

    public void someMethod() {
        @YourAnnotation int a = 0;
    }
    
  • 方法 - 方法声明

    @YourAnnotation
    public void someMethod() {..}
    
  • 包裹 - 包裹声明。注意:这只能在 中使用。package-info.java

    @YourAnnotation
    package org.yourcompany.somepackage;
    
  • 参数 - 参数声明

    public void someMethod(@YourAnnotation param) {..}
    
  • TYPE - 类、接口(包括注释类型)或枚举声明

    @YourAnnotation
    public class SomeClass {..}
    

您可以为给定的批注指定多个 s。例如:ElementType

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})

答案 2

这总结了主要的:

@CustomTypeAnnotation
public class MyAnnotatedClass {
  @CustomFieldAnnotation
  private String foo;

  @CustomConstructorAnnotation
  public MyAnnotatedClass() {
  }

  @CustomMethodAnnotation
  public String bar(@CustomParameterAnnotation String str) {
    @CustomLocalVariableAnnotation String asdf = "asdf";
    return asdf + str;
  }
}

ANNOTATION_TYPE是另一个注释上的注释,如下所示:

@CustomAnnotationTypeAnnotation
public @interface SomeAnnotation {
  ..
}

包在包中的文件中定义,如下所示:package-info.java

@CustomPackageLevelAnnotation
package com.some.package;

import com.some.package.annotation.PackageLevelAnnotation;

有关包注释的详细信息,请参阅此处此处


推荐