मॉडिफ़ायर के बजाय जावा @ ऑवरराइड एनोटेशन का उपयोग क्यों करता है?


19

जावा के लिए @Overrideएक नया overrideसंशोधक बनाने के बजाय एनोटेशन का उपयोग करने के लिए क्या प्रेरणाएं थीं ?

@Override
public String toString() {
   return "";
}

बनाम

public override String toString() {
   return "";
}

2
इसके बाद बवाल मच गया।
ट्यूलेंस कोरडोवा

जवाबों:


21

@ ऑवरराइड मूल रूप से भाषा में नहीं था। जब इसे जोड़ने की आवश्यकता महसूस की गई, तो भाषा में एक नया कीवर्ड जोड़ने की तुलना में सामान्य तंत्र (एनोटेशन) का उपयोग करना आसान था। एक नया कीवर्ड जोड़ना हमेशा एक असंगत परिवर्तन होता है क्योंकि यह उन कार्यक्रमों को तोड़ सकता है जो पहचानकर्ता के रूप में उस शब्द का उपयोग करते हैं।

उन भाषाओं में, जो पहले दिन से एक ओवरराइड मार्कर जोड़ते हैं, यह अक्सर एक कीवर्ड होता है (उदाहरण कोटलिन और स्काला हैं), जावा में यह पुराने जावा संस्करण के साथ पीछे की ओर रहने की बात थी, जिसमें कोई ओवरराइड मार्कर नहीं था।


यह असंगत है कि ओवरराइड एक एनोटेशन है, जब नए कीवर्ड पेश किए गए परिवर्तन हुए हैं। उदाहरण के लिए इंटरफ़ेस विधियों के लिए "डिफ़ॉल्ट" संशोधक।
jwa

6
@jwa वास्तव में नहीं: defaultपहले से ही एक आरक्षित कीवर्ड था (स्विच स्टेटमेंट में प्रयुक्त) - उन्होंने इसके लिए एक नया उपयोग जोड़ा है। देखते हैं - भी कुछ खोजशब्दों जो अभी कुछ भी नहीं करते, लेकिन भविष्य में उपयोग (स्थिरांक, गोटो) के लिए आरक्षित हैं कर रहे हैं JLS §3.9
मीकल Kosmulski

3
"उदाहरण कोटलिन और जावा हैं" यहां टाइपो की तरह दिखता है, क्या आपका मतलब जावा के बजाय स्कैला लिखना है?
gnat

6
जब तक यह सही नहीं होता है कि वैश्विक कीवर्ड्स को जोड़ने से सामान टूट जाता है, इसे बिना कोड को तोड़े एक प्रासंगिक कीवर्ड के रूप में जोड़ा जा सकता है। यह मानकर नहीं किया गया कि यह पार्सिंग को थोड़ा जटिल करेगा और एनोटेशन तंत्र पर्याप्त रूप से अच्छा था
jk।

1
@ MichałKosmulski: मुझे याद है enumकि जोड़ा गया कीवर्ड पुराने कोड को तोड़ देगा। यहां अधिक ब्रेकिंग कीवर्ड: stackoverflow.com/questions/16506411
एलोन गुरिलनेक

13

आपको वास्तव में व्यवहार को ओवरराइड करने के लिए @ ऑवरराइड एनोटेशन की आवश्यकता नहीं है; यह एक एनोटेशन है क्योंकि यह केवल संकलक के लिए विधि के इरादे के कुछ संदर्भ को जोड़ रहा है, न कि विधि को ही बदल रहा है।

एनोटेशन के बिना, आप कार्यक्षमता को ओवरराइड करने का इरादा कर सकते हैं, लेकिन गलती से ऐसा करने में विफल (थोड़ा अलग हस्ताक्षर का उपयोग करके)। एनोटेशन को जोड़ना कंपाइलर को एक त्रुटि उत्पन्न करने के लिए कहता है यदि यह विधि वास्तव में व्यवहार से अधिक नहीं है।

जैसे, यह एनोटेशन के रूप में सही समझ में आता है।


+1 यह समझ में आता है कि एनोटेशन के माध्यम से चेतावनियों को अक्षम करने के समान ही एनोटेशन के माध्यम से वैकल्पिक चेतावनियों / त्रुटियों को सक्षम करना भी संभव होगा।
हल्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.