ग्रहण इंटरफ़ेस तरीकों पर @Override के बारे में शिकायत क्यों करता है?


134

मेरे पास एक मौजूदा परियोजना है जो @Overrideउन तरीकों का उपयोग करती है जो सुपरक्लास विधियों के बजाय इंटरफ़ेस विधियों को ओवरराइड करती हैं । मैं इसे कोड में नहीं बदल सकता, लेकिन मैं चाहूंगा कि एनक्लप को एनोटेशन के बारे में शिकायत करना बंद कर दूं, क्योंकि मैं अभी भी मावेन के साथ निर्माण कर सकता हूं।

मैं इस त्रुटि को अक्षम करने के बारे में कैसे जाऊंगा?

नोट: परियोजना आवश्यकताओं के कारण, मुझे जावा 1.5 के लिए संकलन करने की आवश्यकता है।


लेकिन ऐसा लगता है कि स्रोत जावा 6 को लक्षित है?
एकरनोकड़

वास्तव में। मैक समर्थन के लिए जावा 5 एक देरी की आवश्यकता थी।
स्टीफन केंडल

जवाबों:


268

@Overrideकिसी इंटरफ़ेस द्वारा घोषित किए गए तरीकों को लागू करने वाले एनोटेशन का उपयोग केवल जावा 6 से ही मान्य है। यह जावा 5 में एक त्रुटि है।

सुनिश्चित करें कि जावा 6 JRE का उपयोग करने के लिए आपकी IDE परियोजनाएँ सेटअप हैं, और "स्रोत संगतता" 1.6 या अधिक पर सेट है:

  1. विंडो खोलें> वरीयता संवाद
  2. जावा> कंपाइलर पर ब्राउज़ करें।
  3. वहां, "कंपाइलर अनुपालन स्तर" को 1.6 पर सेट करें।

याद रखें कि ग्रहण एक विशिष्ट परियोजना के लिए इन वैश्विक सेटिंग्स को ओवरराइड कर सकता है, इसलिए उन्हें भी जांचें।


अपडेट करें:

जावा 5 के तहत त्रुटि सिर्फ ग्रहण के साथ नहीं है; javacकमांड लाइन से सीधे उपयोग करने से आपको वही त्रुटि मिलेगी। यह जावा 5 स्रोत कोड मान्य नहीं है।

हालांकि, आप -target 1.5JDK 6 के विकल्प को निर्दिष्ट कर सकते हैं javac, जो जावा 6 स्रोत कोड से जावा 5 संस्करण क्लास फ़ाइल का उत्पादन करेगा।


नहीं, यह नहीं होगा। यह एक त्रुटि संदेश उत्पन्न करेगा "javac: स्रोत रिलीज़ 1.6 को लक्ष्य रिलीज़ 1.6 की आवश्यकता है"।
माइकल बोर्गवर्ड

9
नहीं, यह नहीं होगा। यह एक संकलित वर्ग फ़ाइल का उत्पादन करेगा। यदि आप -source 1.6 विकल्प निर्दिष्ट करते हैं तो यह केवल वह त्रुटि देता है, जो इस कार्य को करने के लिए आवश्यक नहीं है।
एरिकसन

तुम्हें पता है, क्योंकि मैं मैन्युअल रूप से वैसे भी निर्माण करता हूं, मैं सिर्फ 1.6 पर स्रोत स्तर छोड़ सकता हूं। मुझे किसी भी प्रकार का मिश्रित विन्यास काम नहीं कर पाया, और यह सबसे सरल लगता है।
स्टीफन केंडल

@erickson क्या -getget -source डाउनग्रेड 1.7 से 1.6 के लिए भी काम करता है? stackoverflow.com/q/8869869/632951
पचेरियर

यह 1.8 JDK के साथ काम नहीं करता है। स्रोत 1.6 -target 1.5 का कहना है: javac: स्रोत रिलीज 1.6 लक्ष्य रिलीज 1.6 की आवश्यकता है
डॉन हैच

39

निम्नानुसार करें:

परियोजना -> गुण -> जावा संकलक ->

  • प्रोजेक्ट विशिष्ट सेटिंग सक्षम करें - 'हां'
  • संकलक अनुपालन - 1.6
  • उत्पन्न वर्ग फाइलें और स्रोत संगतता - 1.5

धन्यवाद - एहसास नहीं था कि प्रत्येक परियोजना की भी अपनी सेटिंग्स है
व्हॉटोलेमीहाट

2
मेरे मामले में मुझे इस विकल्प को निष्क्रिय करने की आवश्यकता थी।
मटन रोजी

12

यह भी देखें कि क्या परियोजना में पहलू है। जावा संस्करण वहां से अलग हो सकता है।


1
स्कोर! आप सही थे, मेरा प्रोजेक्ट पहलू वैश्विक अनुपालन सेटिंग्स को पछाड़ रहा था। धन्यवाद!
bpawlowski

9

प्रोजेक्ट विशिष्ट सेटिंग सक्षम की जा सकती हैं। अपनी परियोजना का चयन करें Project > Properties > Java Compiler, या परिवर्तन और इसके बाद के संस्करण इसी भूल नहीं । बैठाना यह काम नहीं करता, अपनी परियोजना ग्रहण से हटाने, हटाने , , फ़ाइलें। और ग्रहण। इसने मेरे लिए काम कियाuncheckEnable project specific settingsJdk 1.6JRE
.settings folders.project.classpathclean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your project


7

आप जावा 6 सिंटैक्स को स्वीकार करने के लिए संकलक सेटिंग्स को बदल सकते हैं लेकिन जावा 5 आउटपुट (जैसा मुझे याद है) उत्पन्न करते हैं। और अगर आपके रनटाइम की जरूरत हो तो "जेनरेट क्लास फाइल कम्पैटिबिलिटी" को थोड़ा कम सेट करें। अद्यतन : मैंने एक्लिप्स की जाँच की, लेकिन यह शिकायत करता है कि मैंने स्रोत संगतता को १.६ पर और संगतता को १.५ पर सेट किया है। अगर 1.6 की अनुमति नहीं है, तो मैं आमतौर पर स्रोत में अपमानजनक @Override टिप्पणियों पर टिप्पणी करता हूं (जो आपके मामले में मदद नहीं करता है)।

Update2: यदि आप केवल मैनुअल बिल्ड करते हैं, तो आप एक छोटा प्रोग्राम लिख सकते हैं, जो मूल प्रोजेक्ट को एक नए में कॉपी करता है, जावा स्रोतों से स्ट्रिप्स @ ऑवरराइड एनोटेशन और आप सिर्फ ग्रहण में क्लीन प्रोजेक्ट को हिट करते हैं।


क्या आप कोई विवरण प्रदान कर सकते हैं?
स्टीफन केंडल

यह उसी पेज पर है जैसा कि erickson द्वारा बताया गया है।
एकरनोकड

यह परियोजना कई जीबी बड़ी है। एक सरल "कॉपी" भी व्यावहारिक नहीं है। : /
स्टीफन केंडल

इस मामले में, आपको परिवर्तन की अनुमति माँगनी होगी। या 1.5 संगत स्रोतों के लिए एक शाखा बनाएं और मैन्युअल रूप से जावा फ़ाइलों को ठीक करें।
१२:०५ बजे

1

आप Java6 कक्षाओं से Java5 संस्करण बनाने के लिए Retroweaver को भी आज़मा सकते हैं।


1

"@Override" के सभी उदाहरणों को खोजने और बदलने (हटाने) के लिए ग्रहण का उपयोग करें। फिर "क्लीन अप" का उपयोग करके गैर-इंटरफ़ेस ओवरराइड को वापस जोड़ें।

कदम:

  1. अपनी स्रोत फ़ाइलों वाली परियोजनाओं या फ़ोल्डरों का चयन करें।
  2. खोज संवाद लाने के लिए "खोज> खोज ..." (Ctrl-H) पर जाएं।
  3. "फ़ाइल खोज" टैब पर जाएं।
  4. "फ़ाइल नाम पैटर्न" में "@ पाठ और" * .java "में" @Override "दर्ज करें। "@Override" के सभी उदाहरणों को हटाने के लिए "बदलें ...", फिर "ठीक है" पर क्लिक करें।
  5. "विंडो> वरीयताएँ> जावा> कोड शैली> क्लीन अप" पर जाएं और एक नया प्रोफ़ाइल बनाएं।
  6. प्रोफ़ाइल को संपादित करें, और "मिसिंग कोड> अनुपलब्ध एनोटेशन> @ ऑवरराइड" को छोड़कर सब कुछ अनचेक करें। सुनिश्चित करें कि "इंटरफ़ेस विधियों का कार्यान्वयन" अनियंत्रित है।
  7. अपनी स्रोत फ़ाइलों वाली परियोजनाओं या फ़ोल्डरों का चयन करें।
  8. "स्रोत> क्लीन अप ..." (Alt + Shift + s, फिर u) का चयन करें, फिर गैर इंटरफ़ेस इंटरफ़ेस वापस जोड़ने के लिए "समाप्त करें"।

0

मैंने आपकी समस्या को समझा, अपने jdk को अपने jdk से बदलकर अधिक से अधिक 1.5 कर दिया


0

यह कॉन्फ़िगर करके कि आईडीई परियोजनाएं जावा 6 जेआरई या इसके बाद के संस्करण का उपयोग करने के लिए सेटअप हैं, कभी-कभी ग्रहण की त्रुटि को दूर नहीं करती है। मेरे लिए Eclipe IDE को पुनः आरंभ करने में मदद मिली।


0

कंपाइलर कंप्लायंस सेटिंग को विंडो टैब से 1.6 या 1.7 में बदलने के बाद भी, फिर प्रिफरेंस, जावा, फिर कंपाइलर और कंपाइलर कंप्लायंस को सेट करने के बाद भी मुझे यह समस्या आ रही थी। विचार यह है कि हमें प्रोजेक्ट फ़ोल्डर पर जाने की जरूरत है, राइट क्लिक, जावा और 1.6 या हाइगर के लिए कंपाइलर अनुपालन सेट करें। इसने मेरे लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.