ITEEDU

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