2010-12-10 2 views
1

http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Target.htmlЛюбой пример использования @Target ({}) для java.lang.annotation.Target?

Эта мета-аннотация означает, что объявленный тип предназначен исключительно для использования в качестве типа члена в объявлениях типа сложных аннотаций. Он не может использоваться для аннотирования чего-либо напрямую:

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

Что это значит? Любой пример кода, используя это?

NB: Я имею в виду использование пустых args @Target, как описано в JavaDoc, а не для хорошо документированного использования Target с константами enum.

+0

неработающая ссылка .... – skaffman 2010-12-10 09:54:12

+0

Я исправил ссылку. – GaryF 2010-12-10 10:22:03

ответ

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.

+0

также укажите код определения @XmlNs и @XmlSchema. – simpatico 2010-12-10 15:40:34

3

Аннотации @Target - это специальная аннотация для объявления аннотаций. Это java «buildin» с самоопределяемой декларацией (@Target имеет объявление @Target(ElementType.ANNOTATION_TYPE)). Поэтому вы не можете использовать его в классе или методе, просто на аннотации. «Нормальные» аннотации нуждаются в этом, чтобы определить, где их можно использовать.

После простой Spring аннотации @Required, используемой для фасоли инкубационных требуемых свойств компоненты:

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

} 

@Required В аннотации может быть использован на методах только, а не на полях, классах или других элементах.

Смежные вопросы