@Documented @Retention(RUNTIME) @Target(ANNOTATION_TYPE) public @interface Target
java.lang.annotation.ElementType
. If an @Target
meta-annotation is not present on an annotation interface T
, then an annotation of type T
may be written as a modifier for any declaration.
If an @Target
meta-annotation is present, the compiler will enforce the usage restrictions indicated by ElementType
enum constants, in line with JLS 9.7.4.
For example, this @Target
meta-annotation indicates that the declared interface is itself a meta-annotation interface. It can only be used on annotation interface declarations:
@Target(ElementType.ANNOTATION_TYPE) public @interface MetaAnnotationType { ... }
This @Target
meta-annotation indicates that the declared class or interface is intended solely for use as a member class or interface in complex annotation interface declarations. It cannot be used to annotate anything directly:
@Target({}) public @interface MemberInterface { ... }
It is a compile-time error for a single ElementType
constant to appear more than once in an @Target
annotation. For example, the following @Target
meta-annotation is illegal:
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD}) public @interface Bogus { ... }
Modifier and Type | Required Element | Description |
---|---|---|
ElementType[] |
value |
Returns an array of the kinds of elements an annotation interface can be applied to. |
ElementType[] value
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/annotation/Target.html