http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Target.html
此元注释表明声明的类型仅用作复杂注释类型声明中的成员类型。它不能用于直接注释任何东西:
@Target({})
public @interface MemberType {
...
}
这是什么意思?使用这个的任何示例代码?
注意:我正在引用@Target的空args使用,如JavaDoc中所述,而不是使用枚举常量对Target进行充分记录的使用。
答案 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
只能用于方法,而不能用于字段,类或其他元素。