大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: 限定 annotation 使用对象 - Target

在定义Annotation类型时,您使用java.lang.annotation.Target可以定义其适 用之时机,在定义时可以指定java.lang.annotation.ElementType的枚举值:
package java.lang.annotation;

public enum ElementType {
    TYPE, // 适用 class, interface, enum
    FIELD, // 适用 field
    METHOD, // 适用 method
    PARAMETER, // 适用 method 上之 parameter
    CONSTRUCTOR, // 适用 constructor
    LOCAL_VARIABLE, // 适用区域变量
    ANNOTATION_TYPE, // 适用 annotation 类型
    PACKAGE // 适用 package
}


举个例子来说,假设您定义Annotation只能适用于constructor与method:

  • Debug.java
package onlyfun.caterpillar;

import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface Debug {}

如果您尝试将Debug用于class上:
  • SomeObject.java
package onlyfun.caterpillar;

@Debug
public class SomeObject {
public void doSomething() {
// ....
}
}

则在编译时会发生以下的错误:
SomeObject.java:3: annotation type not applicable to this kind of declaration
@Debug
^
1 error