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

Packages that use Retention
Package
Description
java.beans
Contains classes related to developing beans -- components based on the JavaBeans architecture.
java.io
Provides for system input and output through data streams, serialization and the file system.
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.
javax.annotation.processing
Facilities for declaring annotation processors and for allowing annotation processors to communicate with an annotation processing tool environment.
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 Retention in java.beans

  Classes in java.beans with annotations of type Retention
  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 Retention in java.io

  Classes in java.io with annotations of type Retention
  Modifier and Type
  Class
  Description
  `@interface`
  `Serial`
  Indicates that an annotated field or method is part of the serialization mechanism defined by the Java Object Serialization Specification.

- ## Uses of Retention in java.lang

  Classes in java.lang with annotations of type Retention
  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 the warnings to be suppressed at compile time in the annotated element, and in all elements contained in the annotated element.

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

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

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

  Classes in javax.annotation.processing with annotations of type Retention
  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 interfaces 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.

- ## Uses of Retention in javax.management

  Classes in javax.management with annotations of type Retention
  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 Retention in javax.swing

  Classes in javax.swing with annotations of type Retention
  Modifier and Type
  Class
  Description
  `@interface`
  `SwingContainer`
  An annotation used to specify some swing-related information for the automatically generated `BeanInfo` classes.

- ## Uses of Retention in jdk.jfr

  Classes in jdk.jfr with annotations of type Retention
  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`
  `Contextual`
  Event field annotation, specifies that the value carries contextual information.
  `@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 sets the default name for an element.
  `@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`
  `Throttle`
  Event annotation, specifies the maximum rate of events per time unit, (for example, `"100/s"`).
  `@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.