@Target({})对java.lang.annotation.Target的任何示例用法?

时间:2010-12-10 04:48:30

标签: java annotations

http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Target.html

此元注释表明声明的类型仅用作复杂注释类型声明中的成员类型。它不能用于直接注释任何东西:

@Target({}) 
public @interface MemberType {
    ...
}

这是什么意思?使用这个的任何示例代码?

注意:我正在引用@Target的空args使用,如JavaDoc中所述,而不是使用枚举常量对Target进行充分记录的使用。

2 个答案:

答案 0 :(得分:4)

当注释只能在其他注释中使用(具有非空目标集)时,将使用空目标,并且不能直接附加到任何内容。使用此示例的一个示例是在JAXB中,其中@XmlNs注释具有空目标列表;下面的代码是从我自己的代码中提取的(有一些非常小的改动),并且是这个特定包的完整package-info.java文件:

@XmlSchema(namespace = Namespaces.MAIN,
    xmlns = { @XmlNs(prefix = "xlink", namespaceURI = Namespaces.XLINK) },
    elementFormDefault = QUALIFIED, attributeFormDefault = QUALIFIED)
package example.bindings;

import static javax.xml.bind.annotation.XmlNsForm.QUALIFIED;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;
import example.common.Namespaces;

@XmlNs注释用于指示JAXB用于XLink命名空间的前缀,但该信息只能放置在模式级别(来自一般XML的限制,但对于大多数问题不是问题)部分)因为可能有很多这样的映射,它不能直接附加到包,而是必须进入主@XmlSchema注释的数组值属性。

答案 1 :(得分:3)

@Target注释是声明注释的特殊注释。它是一个带有自定义声明的java“buildin”(@Target声明为@Target(ElementType.ANNOTATION_TYPE))。所以你不能在类或方法上使用它,只能在注释上使用它。 “正常”注释需要这样来定义它们的使用位置。

遵循简单的Spring注释@Required,用于所需bean属性的bean设置器:

@Target(ElementType.METHOD)
public @interface Required {

}

注释@Required只能用于方法,而不能用于字段,类或其他元素。