2012-03-07 15 views
11

ग्रहण नील के साथ, जावा 1,6ग्रहण यह प्यार करता है, javac यह नफरत करता है, यह एक enum है, एक तरह से, एक अंतरफलक

public interface I { 
    String getName(); 
} 

/* and in another file */ 

public enum E implements I { 
    E1() { 
    String getName() { return "foo"; } 
    }; 
} 

ग्रहण में, यह काम किया! अन्य कक्षाएं टाइप I के संदर्भों पर getName() का आह्वान कर सकती हैं। वास्तविक जावैक ने इसे अस्वीकार कर दिया, दावा किया कि enum में getName() जैसी कोई चीज़ नहीं थी। क्या यह सिर्फ एक ग्रहण बग है?

ध्यान दें कि इस बारे में क्या विचलित है गणनाकर्ता के अंदर विधि परिभाषा है। अगर मैं सामान्य बात करता हूं, तो यह सब ग्रहण और जावैक दोनों में ठीक काम करता है, और इस क्षेत्र को एक क्षेत्र के मूल्य को वापस करने वाले enum के नीचे परिभाषित किया गया है।

+1

इसकी अनुमति दी जानी चाहिए। यह प्रश्न संबंधित है: http://stackoverflow.com/questions/2709593/why-would-an-enum-implement-an-interface आपको 'javac' त्रुटि क्या मिल रही है? शीर्षक के लिए –

+0

+1। :-) –

+2

http://stackoverflow.com/questions/9505857/workaround-for-javac-compilation-order-bug-in-maven – Nicocube

उत्तर

1

सबसे पहले मैं @ यशवत से सहमत हूं।

अन्यथा यह इस एक के साथ संबंधित हो सकता है: Workaround for javac compilation order bug in maven

मुझे लगता है कि यह नाम संबंधित आदेश है। अपने इंटरफ़ेस ए का नाम बदलने का प्रयास करें, यह पहले संकलित हो सकता है और चीजों को काम करना चाहिए।

12

getName()E1public होना चाहिए - क्या यह आपको समस्याएं पैदा कर रहा है? अन्यथा, आप एक पैकेज विधि-निजी विधि के साथ एक सार्वजनिक विधि (इंटरफेस में घोषित सभी विधियां सार्वजनिक) को ओवरराइड करने का प्रयास कर रहे हैं, जिसकी अनुमति नहीं है।

1

इंटरफेस विधियां सार्वजनिक स्कॉप्ड हैं। अपने enum में दृश्यता स्तर बढ़ाएं और इसे सफलतापूर्वक संकलित करना चाहिए। एक साइड नोट के रूप में, आपका कोड एक्लिप्स के मेरे संस्करण में एक संकलन त्रुटि दिखाता है (इंडिगो मैक 0 एस एक्स 10.7.2, जेडीके 1.6 पर चल रहा है)।

0

ध्यान रखें कि ग्रहण अपने स्वयं के पार्सर और कंपाइलर को लागू करता है, जो आउटपुट प्रदान करता है जो इसके संपादक के साथ मजबूती से बांधता है। आम तौर पर, यह बहुत अच्छी तरह से काम करता है; हालांकि, जब एक नई भाषा सुविधा खेल में आती है, तो संकलक नई भाषा सुविधा को लागू करने में पीछे हट जाता है।

javac कमांड लाइन हमेशा (लगभग लगभग) सही है, मान लीजिए कि आपको ओरेकल/सूर्य से अपना जावैक मिल रहा है।

yshavit का जवाब सबसे अच्छा है, क्योंकि यह कारण बताता है कि इसे ग्रहण में संकलित क्यों नहीं किया जाना चाहिए। अब तक मुझे लगता है कि यह तय किया गया है (और ग्रहण में ठीक से संकलित नहीं होगा)।

संबंधित मुद्दे