भाष्यांचा मुख्य फायदा आधीपासून जेडीकेमध्ये असलेल्या मानकांचा वापर करण्यापासून होत नाही. त्याच वेळी, आपले स्वतःचे भाष्य तयार करण्याची क्वचितच आवश्यकता असते. परंतु जर आपण एक मोठी प्रणाली विकसित करत आहोत किंवा स्वतंत्र लायब्ररी तयार करत आहोत, तर वास्तुशास्त्रीय स्तरावर, आपले स्वतःचे भाष्य अंमलात आणल्यास निश्चितपणे लाभांश मिळेल.

चला एक भाष्य तयार करण्याचा प्रयत्न करूया.

हे करण्यासाठी, एक फाइल तयार करा, परंतु वर्ग किंवा इंटरफेस लिहिण्याऐवजी , @interface लिहा . आमच्या भाष्यासाठी ही फाइल असेल. भाष्याची अंतर्गत रचना इंटरफेस सारखीच असते.

public @interface Sum {
   int sum() default 0;
}

@interface सूचित करते की हे एक भाष्य आहे,
डीफॉल्ट म्हणते की पॅरामीटरमध्ये विशिष्ट डीफॉल्ट मूल्य असेल.

ता-दा! आम्ही एक भाष्य तयार केले! सैद्धांतिकदृष्ट्या आम्ही ते आधीच वापरू शकतो, परंतु प्रथम ते कॉन्फिगर करणे चांगले होईल.

कॉन्फिगरेशनशिवाय, आमचे भाष्य कोणत्याही गोष्टीवर लागू केले जाऊ शकते (वर्ग, पद्धती, विशेषता इ.), त्यामुळे या टप्प्यावर ते वापरण्यात काही अर्थ नाही. हे विचित्र वाटेल, आमचे भाष्य इतर भाष्यांसह भाष्य करणे आवश्यक आहे!

चला @Target ने सुरुवात करूया .

@Target भाष्य (Java 1.5 पासून संबंधित) भाष्य लागू करण्याची क्षमता प्रतिबंधित करते. एका विशिष्ट स्तरापर्यंत वापर मर्यादित करण्यासाठी, ते कोणत्या प्रकारांवर लागू केले जाऊ शकते हे सूचित करण्यासाठी आम्हाला @Target भाष्याकडे युक्तिवाद पास करणे आवश्यक आहे . येथे काही सामान्यतः वापरले जाणारे प्रकार आहेत:

@Target(ElementType.PACKAGE) पॅकेजसाठी
@Target(ElementType.TYPE) वर्गांसाठी
@Target(ElementType.CONSTRUCTOR) कन्स्ट्रक्टरसाठी
@Target(ElementType.METHOD) पद्धतींसाठी
@Target(ElementType.FIELD) वर्गातील विशेषता (व्हेरिएबल्स) साठी
@Target(ElementType.PARAMATER) पद्धत पॅरामीटर्ससाठी
@Target(ElementType.LOCAL_VARIABLE) स्थानिक व्हेरिएबल्ससाठी

तुम्हाला अनेक प्रकारांसाठी भाष्य हवे असल्यास, तुम्ही अॅरे म्हणून अनेक आर्ग्युमेंट पास करू शकता:

@Target({ ElementType.PARAMETER, ElementType.LOCAL_VARIABLE })

कॉन्फिगरेशनचा पुढील महत्त्वाचा भाग म्हणजे @Retention भाष्य.

हे भाष्य कोड लाइफ सायकलचे भाग सूचित करते ज्यामध्ये आमची भाष्य उपलब्ध असेल:

RetentionPolicy.SOURCE SOURCE धारणा धोरणासह चिन्हांकित केलेली भाष्ये रन टाइमवर टाकून दिली जातात.
RetentionPolicy.CLASS CLASS धारणा धोरणासह चिन्हांकित केलेली भाष्ये .class फाईलमध्ये लिहिली जातात , परंतु रन टाइममध्ये काढली जातात.
RetentionPolicy.RUNTIME RUNTIME धारणा धोरणासह चिन्हांकित भाष्ये रन टाइमवर टिकून राहतात आणि रन टाइमवर आमच्या प्रोग्राममध्ये प्रवेश केला जाऊ शकतो.

कॉन्फिगरेशनसाठी तुम्ही वापरू शकता अशा आणखी काही भाष्ये आहेत:

भाष्य मूल्य
@वारसा मिळालेला व्युत्पन्न वर्ग भाष्याच्या अंमलबजावणीसाठी पालक वर्गाचा वारसा घेतो असे सूचित करतो.
@दस्तऐवजीकरण हे सूचित करते की जनरेट केलेल्या Javadoc दस्तऐवजीकरणामध्ये भाष्य समाविष्ट केले जाईल.

आता आपले स्वतःचे भाष्य तयार करण्याचा प्रयत्न करूया.

आम्ही एक भाष्य तयार करू जे वर्ग आणि पद्धतींसाठी असेल आणि कोडच्या लेखक आणि आवृत्तीबद्दल माहिती असेल:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Info {
   String author() default "Author";
   String version() default "0.0";
}

आम्ही आमची भाष्य पद्धती आणि वर्गांवर लागू करू शकतो. आमच्या भाष्याचा मेटाडेटा रन टाइमवर उपलब्ध असेल. आमच्या भाष्याच्या पॅरामीटर्सकडे लक्ष द्या: आम्ही दोन युक्तिवाद (लेखक आणि आवृत्ती) देऊ शकतो किंवा आम्ही त्यांना वगळू शकतो. जर आपण ते वगळले, तर निर्दिष्ट डीफॉल्ट मूल्ये ( डिफॉल्ट "लेखक" आणि डीफॉल्ट "0.0" ) वापरली जातील.

हे लक्षात घेण्यासारखे आहे की आम्हाला पॅरामीटर्ससाठी डीफॉल्ट मूल्य निर्दिष्ट करण्याची आवश्यकता नाही. या प्रकरणात, पॅरामीटर अनिवार्य होते.

आर्ग्युमेंट्स पास करताना, नोटेशन व्हॅल्यू = "value" वापरून संबंधित पॅरामीटर निर्दिष्ट केले पाहिजे . पॅरामीटरला नेहमी स्पष्टपणे नाव दिले जाणे आवश्यक आहे, जरी भाष्यात एकच पॅरामीटर असेल.

चला आमचे भाष्य काही वर्गांवर लागू करूया:

@Info
public class MyClass1 {
   @Info
   public void myClassMethod() {}
}

@Info(version = "2.0")
public class MyClass2 {
   @Info(author = "Anonymous")
   public void myClassMethod() {}
}

@Info(author = "Anonymous", version = "2.0")
public class MyClass3 {
   @Info(author = "Anonymous", version = "4.0")
   public void myClassMethod() {}
}