# एनोटेशन क्या हैं? — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-annotations-basics

> समझें एनोटेशन क्या हैं और क्या नहीं, और उन मुट्ठी-भर built-in एनोटेशन से सहज हों जो लगभग हर Java कोडबेस में दिखते हैं।

## मेटाडेटा, व्यवहार नहीं

एक एनोटेशन (`@Something`) कोड — क्लास, मेथड, फ़ील्ड, या पैरामीटर — पर **मेटाडेटा** जोड़ता है, जिसे कम्पाइलर, कोई टूल, या फ़्रेमवर्क (जैसे Spring) पढ़कर उस पर कार्य कर सकता है। एनोटेशन खुद रनटाइम पर कुछ नहीं करता जब तक कि कुछ और इसे खोजने के लिए न लिखा गया हो।

## ज़रूरी built-in एनोटेशन

`@Override` कम्पाइलर से जाँच करवाता है कि मेथड सच में सुपरटाइप के मेथड को ओवरराइड करता है — टाइपो तुरंत पकड़ लेता है। `@Deprecated` किसी API को निरुत्साहित चिह्नित करता है, कॉल साइट पर कम्पाइलर चेतावनी देता है। `@FunctionalInterface` कम्पाइलर से जाँच करवाता है कि इंटरफ़ेस में ठीक एक ही एब्स्ट्रैक्ट मेथड है, ताकि इसे लैम्ब्डा टार्गेट की तरह उपयोग किया जा सके।

```java
class Old {
    @Deprecated
    void legacyMethod() { /* callers now get a compiler warning */ }
}

class Dog extends Animal {
    @Override
    String sound() { return "woof"; }   // typo in the name -> compile error, not a silent new method
}

@FunctionalInterface
interface Transformer<T, R> {
    R apply(T input);   // exactly one abstract method
}
```

## आगे और कहाँ मिलेंगे

फ़्रेमवर्क कस्टम एनोटेशन पर बहुत निर्भर करते हैं — `@Test` (JUnit), `@Entity` (JPA), `@RestController` (Spring)। ये **एडवांस्ड जावा** में आते हैं; Core Java के लिए, एनोटेशन *क्या है* यह जानना और built-in को सहजता से पढ़ना ही काफ़ी है।
