## Uses of Interface
java.lang.annotation.Annotation

- Packages that use Annotation
  Package | Description
  --- | ---
  java.beans | Contains classes related to developing beans -- components based on the JavaBeans™ architecture.
  java.lang | Provides classes that are fundamental to the design of the Java programming language.
  java.lang.annotation | Provides library support for the Java programming language annotation facility.
  java.lang.reflect | Provides classes and interfaces for obtaining reflective information about classes and objects.
  javax.annotation.processing | Facilities for declaring annotation processors and for allowing annotation processors to communicate with an annotation processing tool environment.
  javax.lang.model | Classes and hierarchies of packages used to model the Java programming language.
  javax.lang.model.element | Interfaces used to model elements of the Java programming language.
  javax.management | Provides the core classes for the Java Management Extensions.
  javax.swing | Provides a set of "lightweight" (all-Java language) components that, to the maximum degree possible, work the same on all platforms.
  jdk.jfr | This package provides classes to create events and control Flight Recorder.

- - ### Uses of Annotation in java.beans

    Classes in java.beans that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `BeanProperty` | An annotation used to specify some property-related information for the automatically generated `BeanInfo` classes.
    `interface` | `ConstructorProperties` | An annotation on a constructor that shows how the parameters of that constructor correspond to the constructed object's getter methods.
    `interface` | `JavaBean` | An annotation used to specify some class-related information for the automatically generated `BeanInfo` classes.
    `interface` | `Transient` | Indicates that an attribute called "transient" should be declared with the given `value` when the `Introspector` constructs a `PropertyDescriptor` or `EventSetDescriptor` classes associated with the annotated code element.

  - ### Uses of Annotation in java.lang

    Classes in java.lang that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `Deprecated` | A program element annotated `@Deprecated` is one that programmers are discouraged from using.
    `interface` | `FunctionalInterface` | An informative annotation type used to indicate that an interface type declaration is intended to be a functional interface as defined by the Java Language Specification.
    `interface` | `Override` | Indicates that a method declaration is intended to override a method declaration in a supertype.
    `interface` | `SafeVarargs` | A programmer assertion that the body of the annotated method or constructor does not perform potentially unsafe operations on its varargs parameter.
    `interface` | `SuppressWarnings` | Indicates that the named compiler warnings should be suppressed in the annotated element (and in all program elements contained in the annotated element).

    Methods in java.lang with type parameters of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A extends Annotation> A` | Class.`getAnnotation​(Class<A> annotationClass)` |
    `<T extends Annotation> T` | Module.`getAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is present, else null.
    `<A extends Annotation> A` | Package.`getAnnotation​(Class<A> annotationClass)` |
    `<A extends Annotation> A[]` | Class.`getAnnotationsByType​(Class<A> annotationClass)` |
    `<A extends Annotation> A[]` | Package.`getAnnotationsByType​(Class<A> annotationClass)` |
    `<A extends Annotation> A` | Class.`getDeclaredAnnotation​(Class<A> annotationClass)` |
    `<A extends Annotation> A` | Package.`getDeclaredAnnotation​(Class<A> annotationClass)` |
    `<A extends Annotation> A[]` | Class.`getDeclaredAnnotationsByType​(Class<A> annotationClass)` |
    `<A extends Annotation> A[]` | Package.`getDeclaredAnnotationsByType​(Class<A> annotationClass)` |

    Methods in java.lang that return Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `Annotation[]` | Class.`getAnnotations()` |
    `Annotation[]` | Module.`getAnnotations()` | Returns annotations that are present on this element.
    `Annotation[]` | Package.`getAnnotations()` |
    `<A extends Annotation> A[]` | Class.`getAnnotationsByType​(Class<A> annotationClass)` |
    `<A extends Annotation> A[]` | Package.`getAnnotationsByType​(Class<A> annotationClass)` |
    `Annotation[]` | Class.`getDeclaredAnnotations()` |
    `Annotation[]` | Module.`getDeclaredAnnotations()` | Returns annotations that are directly present on this element.
    `Annotation[]` | Package.`getDeclaredAnnotations()` |
    `<A extends Annotation> A[]` | Class.`getDeclaredAnnotationsByType​(Class<A> annotationClass)` |
    `<A extends Annotation> A[]` | Package.`getDeclaredAnnotationsByType​(Class<A> annotationClass)` |

    Method parameters in java.lang with type arguments of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | Class.`isAnnotationPresent​(Class<? extends Annotation> annotationClass)` | Returns true if an annotation for the specified type is present on this element, else false.
    `boolean` | Package.`isAnnotationPresent​(Class<? extends Annotation> annotationClass)` | Returns true if an annotation for the specified type is present on this element, else false.

  - ### Uses of Annotation in java.lang.annotation

    Classes in java.lang.annotation that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `Documented` | If the annotation `@Documented` is present on the declaration of an annotation type A, then any `@A` annotation on an element is considered part of the element's public contract.
    `interface` | `Inherited` | Indicates that an annotation type is automatically inherited.
    `interface` | `Native` | Indicates that a field defining a constant value may be referenced from native code.
    `interface` | `Repeatable` | The annotation type `java.lang.annotation.Repeatable` is used to indicate that the annotation type whose declaration it (meta-)annotates is repeatable.
    `interface` | `Retention` | Indicates how long annotations with the annotated type are to be retained.
    `interface` | `Target` | Indicates the contexts in which an annotation type is applicable.

    Methods in java.lang.annotation that return types with arguments of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `Class<? extends Annotation>` | Annotation.`annotationType()` | Returns the annotation type of this annotation.
    `Class<? extends Annotation>` | IncompleteAnnotationException.`annotationType()` | Returns the Class object for the annotation type with the missing element.
    `Class<? extends Annotation>` | `value()` | Indicates the containing annotation type for the repeatable annotation type.

    Constructor parameters in java.lang.annotation with type arguments of type Annotation
    Constructor | Description
    --- | ---
    `IncompleteAnnotationException​(Class<? extends Annotation> annotationType, String elementName)` | Constructs an IncompleteAnnotationException to indicate that the named element was missing from the specified annotation type.

  - ### Uses of Annotation in java.lang.reflect

    Methods in java.lang.reflect with type parameters of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<T extends Annotation> T` | AccessibleObject.`getAnnotation​(Class<T> annotationClass)` |
    `<T extends Annotation> T` | AnnotatedElement.`getAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is present, else null.
    `<T extends Annotation> T` | Constructor.`getAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is present, else null.
    `<T extends Annotation> T` | Executable.`getAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is present, else null.
    `<T extends Annotation> T` | Field.`getAnnotation​(Class<T> annotationClass)` |
    `<T extends Annotation> T` | Method.`getAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is present, else null.
    `<T extends Annotation> T` | Parameter.`getAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is present, else null.
    `<T extends Annotation> T[]` | AccessibleObject.`getAnnotationsByType​(Class<T> annotationClass)` |
    `default <T extends Annotation> T[]` | AnnotatedElement.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T[]` | Executable.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T[]` | Field.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T[]` | Parameter.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T` | AccessibleObject.`getDeclaredAnnotation​(Class<T> annotationClass)` |
    `default <T extends Annotation> T` | AnnotatedElement.`getDeclaredAnnotation​(Class<T> annotationClass)` | Returns this element's annotation for the specified type if such an annotation is directly present, else null.
    `<T extends Annotation> T` | Parameter.`getDeclaredAnnotation​(Class<T> annotationClass)` |
    `<T extends Annotation> T[]` | AccessibleObject.`getDeclaredAnnotationsByType​(Class<T> annotationClass)` |
    `default <T extends Annotation> T[]` | AnnotatedElement.`getDeclaredAnnotationsByType​(Class<T> annotationClass)` | Returns this element's annotation(s) for the specified type if such annotations are either directly present or indirectly present.
    `<T extends Annotation> T[]` | Parameter.`getDeclaredAnnotationsByType​(Class<T> annotationClass)` |

    Methods in java.lang.reflect that return Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `Annotation[]` | AccessibleObject.`getAnnotations()` |
    `Annotation[]` | AnnotatedElement.`getAnnotations()` | Returns annotations that are present on this element.
    `<T extends Annotation> T[]` | AccessibleObject.`getAnnotationsByType​(Class<T> annotationClass)` |
    `default <T extends Annotation> T[]` | AnnotatedElement.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T[]` | Executable.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T[]` | Field.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `<T extends Annotation> T[]` | Parameter.`getAnnotationsByType​(Class<T> annotationClass)` | Returns annotations that are associated with this element.
    `Annotation[]` | AccessibleObject.`getDeclaredAnnotations()` |
    `Annotation[]` | AnnotatedElement.`getDeclaredAnnotations()` | Returns annotations that are directly present on this element.
    `Annotation[]` | Constructor.`getDeclaredAnnotations()` | Returns annotations that are directly present on this element.
    `Annotation[]` | Method.`getDeclaredAnnotations()` | Returns annotations that are directly present on this element.
    `<T extends Annotation> T[]` | AccessibleObject.`getDeclaredAnnotationsByType​(Class<T> annotationClass)` |
    `default <T extends Annotation> T[]` | AnnotatedElement.`getDeclaredAnnotationsByType​(Class<T> annotationClass)` | Returns this element's annotation(s) for the specified type if such annotations are either directly present or indirectly present.
    `<T extends Annotation> T[]` | Parameter.`getDeclaredAnnotationsByType​(Class<T> annotationClass)` |
    `Annotation[][]` | Constructor.`getParameterAnnotations()` | Returns an array of arrays of `Annotation`s that represent the annotations on the formal parameters, in declaration order, of the `Executable` represented by this object.
    `abstract Annotation[][]` | Executable.`getParameterAnnotations()` | Returns an array of arrays of `Annotation`s that represent the annotations on the formal parameters, in declaration order, of the `Executable` represented by this object.
    `Annotation[][]` | Method.`getParameterAnnotations()` | Returns an array of arrays of `Annotation`s that represent the annotations on the formal parameters, in declaration order, of the `Executable` represented by this object.

    Method parameters in java.lang.reflect with type arguments of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | AccessibleObject.`isAnnotationPresent​(Class<? extends Annotation> annotationClass)` | Returns true if an annotation for the specified type is present on this element, else false.
    `default boolean` | AnnotatedElement.`isAnnotationPresent​(Class<? extends Annotation> annotationClass)` | Returns true if an annotation for the specified type is present on this element, else false.

  - ### Uses of Annotation in javax.annotation.processing

    Classes in javax.annotation.processing that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `Generated` | The Generated annotation is used to mark source code that has been generated.
    `interface` | `SupportedAnnotationTypes` | An annotation used to indicate what annotation types an annotation processor supports.
    `interface` | `SupportedOptions` | An annotation used to indicate what options an annotation processor supports.
    `interface` | `SupportedSourceVersion` | An annotation used to indicate the latest source version an annotation processor supports.

    Method parameters in javax.annotation.processing with type arguments of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `Set<? extends Element>` | RoundEnvironment.`getElementsAnnotatedWith​(Class<? extends Annotation> a)` | Returns the elements annotated with the given annotation type.
    `default Set<? extends Element>` | RoundEnvironment.`getElementsAnnotatedWithAny​(Set<Class<? extends Annotation>> annotations)` | Returns the elements annotated with one or more of the given annotation types.

  - ### Uses of Annotation in javax.lang.model

    Methods in javax.lang.model with type parameters of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A extends Annotation> A` | AnnotatedConstruct.`getAnnotation​(Class<A> annotationType)` | Returns this construct's annotation of the specified type if such an annotation is present, else `null`.
    `<A extends Annotation> A[]` | AnnotatedConstruct.`getAnnotationsByType​(Class<A> annotationType)` | Returns annotations that are associated with this construct.

    Methods in javax.lang.model that return Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A extends Annotation> A[]` | AnnotatedConstruct.`getAnnotationsByType​(Class<A> annotationType)` | Returns annotations that are associated with this construct.

  - ### Uses of Annotation in javax.lang.model.element

    Methods in javax.lang.model.element with type parameters of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A extends Annotation> A` | Element.`getAnnotation​(Class<A> annotationType)` | Returns this construct's annotation of the specified type if such an annotation is present, else `null`.

  - ### Uses of Annotation in javax.management

    Classes in javax.management that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `ConstructorParameters` | An annotation on a constructor that shows how the parameters of that constructor correspond to the constructed object's getter methods.
    `interface` | `DescriptorKey` | Meta-annotation that describes how an annotation element relates to a field in a `Descriptor`.
    `interface` | `MXBean` | Annotation to mark an interface explicitly as being an MXBean interface, or as not being an MXBean interface.

  - ### Uses of Annotation in javax.swing

    Classes in javax.swing that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `SwingContainer` | An annotation used to specify some swing-related information for the automatically generated `BeanInfo` classes.

  - ### Uses of Annotation in jdk.jfr

    Classes in jdk.jfr that implement Annotation
    Modifier and Type | Class | Description
    --- | --- | ---
    `interface` | `BooleanFlag` | Event field annotation, specifies that the value is a boolean flag, a `true` or `false` value
    `interface` | `Category` | Event annotation, to associate the event type with a category, in the format of a human-readable path.
    `interface` | `ContentType` | Meta annotation, specifies that an annotation represents a content type, such as a time span or a frequency.
    `interface` | `DataAmount` | Event field annotation, specifies that a value represents an amount of data (for example, bytes).
    `interface` | `Description` | Annotation that describes an element by using a sentence or two.
    `interface` | `Enabled` | Event annotation, determines if an event should be enabled by default.
    `interface` | `Experimental` | Annotation that specifies that an element is experimental and may change without notice.
    `interface` | `Frequency` | Event field annotation, specifies that the value is a frequency, measured in Hz.
    `interface` | `Label` | Annotation that sets a human-readable name for an element (for example, `"Maximum Throughput"`).
    `interface` | `MemoryAddress` | Event field annotation, specifies that the value is a memory address.
    `interface` | `MetadataDefinition` | Meta annotation for defining new types of event metadata.
    `interface` | `Name` | Annotation that overrides the default name for an element (for example, when the default package for an event is not appropriate).
    `interface` | `Percentage` | Event field annotation to use on fractions, typically between `0.0` and `1.0`, to specify that the value is a percentage.
    `interface` | `Period` | Event annotation, specifies the default setting value for a periodic event.
    `interface` | `Registered` | Event annotation, for programmatic event registration.
    `interface` | `Relational` | Meta annotation for relational annotations, to be used on an annotation.
    `interface` | `SettingDefinition` | Annotation that specifies that a method in an event class should be used to filter out events.
    `interface` | `StackTrace` | Event annotation, determines whether an event by default has a stack trace or not.
    `interface` | `Threshold` | Event annotation, specifies the default duration below which an event is not recorded (for example, `"20 ms"`).
    `interface` | `Timespan` | Event field annotation, specifies that the value is a duration.
    `interface` | `Timestamp` | Event field annotation, specifies that the value is a point in time.
    `interface` | `TransitionFrom` | Event field annotation, specifies that the event transitioned from a thread.
    `interface` | `TransitionTo` | Event field annotation, specifies that the event will soon transition to a thread.
    `interface` | `Unsigned` | Event field annotation, specifies that the value is of an unsigned data type.

    Methods in jdk.jfr with type parameters of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A extends Annotation> A` | EventType.`getAnnotation​(Class<A> annotationClass)` | Returns the first annotation for the specified type if an annotation element with the same name is directly present, otherwise `null`.
    `<A extends Annotation> A` | SettingDescriptor.`getAnnotation​(Class<A> annotationType)` | Returns the first annotation for the specified type if an annotation element with the same name is available, `null` otherwise.
    `<A extends Annotation> A` | ValueDescriptor.`getAnnotation​(Class<A> annotationType)` | Returns the first annotation for the specified type if an annotation element with the same name is directly present for this value descriptor, `null` otherwise.

    Method parameters in jdk.jfr with type arguments of type Annotation
    Modifier and Type | Method | Description
    --- | --- | ---
    `<A> A` | AnnotationElement.`getAnnotation​(Class<? extends Annotation> annotationType)` | Returns the first annotation for the specified type if an `AnnotationElement` with the same name exists, else `null`.

    Constructor parameters in jdk.jfr with type arguments of type Annotation
    Constructor | Description
    --- | ---
    `AnnotationElement​(Class<? extends Annotation> annotationType)` | Creates an annotation element to use for dynamically defined events.
    `AnnotationElement​(Class<? extends Annotation> annotationType, Object value)` | Creates an annotation element to use for dynamically defined events.
    `AnnotationElement​(Class<? extends Annotation> annotationType, Map<String,​Object> values)` | Creates an annotation element to use for dynamically defined events.