> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syntblaze.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Java Target Annotation

The `@Target` annotation is a meta-annotation in Java used to restrict the syntactic contexts where a custom annotation can be applied. By specifying one or more `ElementType` enum constants, it dictates the exact Java elements that are legally permitted to be decorated by the defined annotation, enforcing these restrictions at compile time.

## Syntax and Declaration

The `@Target` annotation accepts a single element named `value`, which is an array of `java.lang.annotation.ElementType`.

```java theme={"dark"}
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

// Single element target
@Target(ElementType.METHOD)
public @interface SingleTargetAnnotation {}

// Multiple element targets require array initializer syntax
@Target({ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface MultiTargetAnnotation {}
```

If the `@Target` meta-annotation is omitted from an annotation declaration, the resulting annotation can be applied to any declaration context (classes, methods, fields, etc.), but it cannot be applied to type parameter or type use contexts.

## The `ElementType` Enum

The scope of `@Target` is strictly defined by the constants within the `ElementType` enum. Each constant maps to a specific structural component of the Java programming language:

* `TYPE`: Class, interface (including annotation interfaces), enum, or record declaration.
* `FIELD`: Field declaration, including enum constants.
* `METHOD`: Method declaration.
* `PARAMETER`: Formal parameter declaration.
* `CONSTRUCTOR`: Constructor declaration.
* `LOCAL_VARIABLE`: Local variable declaration.
* `ANNOTATION_TYPE`: Annotation interface declaration (used to create other meta-annotations).
* `PACKAGE`: Package declaration (applied within `package-info.java`).
* `TYPE_PARAMETER`: Type variable declaration (introduced in Java 8).
* `TYPE_USE`: Any use of a type (introduced in Java 8).
* `MODULE`: Module declaration (introduced in Java 9, applied within `module-info.java`).
* `RECORD_COMPONENT`: Record component declaration (introduced in Java 14).

## Compilation Mechanics

The Java compiler reads the `@Target` annotation during the annotation processing phase. If a developer attempts to apply an annotation to a structural element not explicitly declared in the annotation's `@Target` array, the compiler throws an `annotation type not applicable to this kind of declaration` error.

Internally, `@Target` is defined as follows, demonstrating that it is restricted to annotating other annotations:

```java theme={"dark"}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value();
}
```

<div
  style={{ 
display: "flex", 
justifyContent: "space-between", 
alignItems: "center", 
maxWidth: "754px", 
padding: "1rem 0",
marginBottom: "24px"
}}
>
  <span style={{ fontWeight: "bold", fontSize: "1.25rem", color: "var(--tw-prose-headings)", fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif" }}>Tired of Poor Java Skills? Fix That With Deep Grasping!</span>

  <a
    href="https://syntblaze.com"
    target="_blank"
    style={{ 
  marginLeft: "24px",
  textDecoration: "none", 
  backgroundColor: "#007AFF",
  color: "#ffffff", 
  padding: "6px 16px", 
  borderRadius: "16px",
  fontSize: "0.9rem",
  fontWeight: "600",
  textAlign: "center",
  transition: "background-color 0.2s ease"
}}
  >
    Learn More
  </a>
</div>

<div style={{ display: "flex", gap: "12px", flexWrap: "wrap" }}>
  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/skill-tracking.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=b9b0305c93bb501c9e767b5c76c88835" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/skill-tracking.png" />

  <img src="https://mintcdn.com/syntblazellc/23tyuOzaWS88qFlc/images/nuggets.png?fit=max&auto=format&n=23tyuOzaWS88qFlc&q=85&s=c86c80197299762989e9b882419b2109" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/nuggets.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/bite-sized-exercises.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=a65f9a38c37ff28ab73ed783c53c60e3" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/bite-sized-exercises.png" />
</div>

<div style={{ display: "flex", gap: "12px", flexWrap: "wrap", marginTop: "12px" }}>
  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/mastery-chain.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=748a1763454713e679260fbb95f154a2" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/mastery-chain.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/element-previews.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=242f61448ff5dd6deaaab2dccc13b507" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/element-previews.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/element-explanations.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=cf0fc1c31f9cd0fc26716781be05fbc9" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/element-explanations.png" />
</div>
