java.lang.annotation.ElementType
:
程序元素类型。此枚举类型的常量提供Java程序中声明的元素的简单分类。这些常量与Target
元注释类型一起使用,以指定使用注释类型的合法位置。
有以下常量:
有人可以解释每一个是什么(在实际代码中注释它们的位置)吗?
答案 0 :(得分:90)
假设您指定ElementType
的注释名为YourAnnotation
:
ANNOTATION_TYPE - 注释类型声明。 注意:这是其他注释
@YourAnnotation
public @interface AnotherAnnotation {..}
CONSTRUCTOR - 构造函数声明
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 - 包裹声明。 注意:这只能在package-info.java
。
@YourAnnotation
package org.yourcompany.somepackage;
PARAMETER - 参数声明
public void someMethod(@YourAnnotation param) {..}
TYPE - 类,接口(包括注释类型)或枚举声明
@YourAnnotation
public class SomeClass {..}
您可以为给定的注释指定多个ElementType
。 E.g:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
答案 1 :(得分:46)
总结了主要内容:
@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;
答案 2 :(得分:3)
<强> TYPE 强>:
注释:
@Target({ElementType.TYPE}) // This annotation can only be applied to
public @interface Tweezable { // class, interface, or enum declarations.
}
以及示例用法:
@Tweezable
public class Hair {
...
}
答案 3 :(得分:0)
TYPE 和 ANNOTATION_TYPE 实际应用的一个很好的例子是 a custom cross-field validation